varstor 0.6.65 → 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 CHANGED
@@ -161,7 +161,7 @@ Varstor.actions({
161
161
  key2: StateAction2 (Varstor, ...arguments[]) => void
162
162
  ...
163
163
  }
164
- })
164
+ }) => Varstor
165
165
  ```
166
166
  ```StateAction``` function type binds ```Varstor``` instance as the first argument, followed by all other ```arguments``` provided by the user at the time of the call.
167
167
  These actions reside in the same scope as regular variables. So you can access them by the ```key```s defined in ```KeysActions``` object through the ```.get()``` method.
@@ -184,7 +184,7 @@ which will return a new instance of ```Varstor``` with the specified ```Namespac
184
184
 
185
185
 
186
186
  ## Method chaining <a name="chaining"></a>
187
- Methods ```.add```, ```.addPersistent```, ```.set()```, ```.reset()```, ```.onChange()```, and ```.removeListener()``` all return a new instance of ```Varstor``` with the same namespace, so method chaining is possible.
187
+ Methods ```.add```, ```.addPersistent```, ```.set()```, ```.reset()```, ```.actions()``` , ```.onChange()```, and ```.removeListener()``` all return a new instance of ```Varstor``` with the same namespace, so method chaining is possible.
188
188
 
189
189
 
190
190
  ## Shortcuts <a name="shortcuts"></a>
@@ -11,6 +11,16 @@
11
11
  return /******/ (() => { // webpackBootstrap
12
12
  /******/ var __webpack_modules__ = ({
13
13
 
14
+ /***/ "./src/types.d.ts"
15
+ /*!************************!*\
16
+ !*** ./src/types.d.ts ***!
17
+ \************************/
18
+ () {
19
+
20
+
21
+
22
+ /***/ },
23
+
14
24
  /***/ "./src/actions.ts"
15
25
  /*!************************!*\
16
26
  !*** ./src/actions.ts ***!
@@ -22,18 +32,22 @@ __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 ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
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
41
  for (const [actionName, actionFn] of Object.entries(actions)) {
29
- ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(actionName)] = {
42
+ ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(actionName)] = {
30
43
  key: actionName,
31
44
  namespace,
32
- value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace())),
45
+ value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace())),
33
46
  isAction: true,
34
47
  listeners: [],
35
48
  };
36
49
  }
50
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
37
51
  }
38
52
 
39
53
 
@@ -162,11 +176,14 @@ __webpack_require__.r(__webpack_exports__);
162
176
  /* harmony export */ setState: () => (/* binding */ setState),
163
177
  /* harmony export */ setupValue: () => (/* binding */ setupValue)
164
178
  /* harmony export */ });
165
- /* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
166
- /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
167
- /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
168
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
169
- /* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
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
+
170
187
 
171
188
 
172
189
 
@@ -176,11 +193,11 @@ const STATE = {};
176
193
  const STATE_CHANGED_PIECES = {};
177
194
  const STATE_PENDING_CHANGES = {};
178
195
  const STORAGE = {};
179
- setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_0__["default"]);
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,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(initialState, (k, v) => [namespace(k), v]);
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
  }
@@ -192,9 +209,9 @@ async function addState(namespace, initialState, isPersistent) {
192
209
  }
193
210
  function setupValue(key, namespace, value, defaultValue, storageType) {
194
211
  const fullKey = namespace(key);
195
- const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value);
212
+ const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(value);
196
213
  const dependencies = isComputedValue
197
- ? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.getParamNames)(value)
214
+ ? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.getParamNames)(value)
198
215
  : [];
199
216
  dependencies.forEach((dependency) => {
200
217
  const fullDependencyKey = namespace(dependency);
@@ -224,10 +241,10 @@ function setupValue(key, namespace, value, defaultValue, storageType) {
224
241
  };
225
242
  }
226
243
  function getNamespaceState(namespace) {
227
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(STATE, (k, { key }) => k === namespace(key));
244
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(STATE, (k, { key }) => k === namespace(key));
228
245
  }
229
246
  function getValues(namespace) {
230
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(getNamespaceState(namespace), (k, { key, value }) => [
247
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(getNamespaceState(namespace), (k, { key, value }) => [
231
248
  key,
232
249
  value,
233
250
  ]);
@@ -270,7 +287,7 @@ async function onStateChange(changes) {
270
287
  }
271
288
  updateDependencies(key, changes, realChanges);
272
289
  }
273
- await (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(realChanges, (k, v) => !v.isSame));
290
+ await (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(realChanges, (k, v) => !v.isSame));
274
291
  }
275
292
  function updateDependencies(key, changes, realChanges) {
276
293
  STATE[key].dependants?.forEach((name) => {
@@ -296,16 +313,16 @@ function isEveryDependencyReady(dependencies, namespace, changesKeys, realChange
296
313
  });
297
314
  }
298
315
  function getState(namespace, arg) {
299
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arg)) {
316
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arg)) {
300
317
  return createStore(arg);
301
318
  }
302
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.recreateStructure)(getValues(namespace));
319
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.recreateStructure)(getValues(namespace));
303
320
  }
304
321
  async function setState(namespace, changes) {
305
322
  const storageChanges = {};
306
- const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.uid)();
323
+ const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.uid)();
307
324
  const storageTypes = {};
308
- (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.forEach)(changes, (k, v) => {
325
+ (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.forEach)(changes, (k, v) => {
309
326
  const fullKey = namespace(k);
310
327
  const { storageType, computeFn, isAction } = STATE[fullKey];
311
328
  if (computeFn || isAction) {
@@ -334,16 +351,15 @@ async function setValues(storageType, changes) {
334
351
  return;
335
352
  }
336
353
  }
337
- joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(changes, (k, newValue) => [k, { newValue }]));
354
+ joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(changes, (k, newValue) => [k, { newValue }]));
338
355
  }
339
356
  async function resetState(namespace, keys) {
340
- await setState(namespace, getDefaultValues(namespace, keys));
341
- return createStore(namespace());
357
+ return setState(namespace, getDefaultValues(namespace, keys));
342
358
  }
343
359
  function getDefaultValues(namespace, keys) {
344
360
  const namespaceState = getNamespaceState(namespace);
345
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(keys
346
- ? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(namespaceState, (k, { key }) => keys.includes(key))
361
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(keys
362
+ ? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(namespaceState, (k, { key }) => keys.includes(key))
347
363
  : namespaceState, (k, { key, defaultValue }) => [key, defaultValue]);
348
364
  }
349
365
  function createPendingChanges(namespace) {
@@ -361,13 +377,15 @@ function createPendingChanges(namespace) {
361
377
  };
362
378
  }
363
379
  function main(namespace) {
364
- if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arguments[1])) {
380
+ if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arguments[1])) {
365
381
  return getState.apply(null, arguments);
366
382
  }
367
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isArray)(arguments[1]) || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(arguments[1]) || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isAsyncFunction)(arguments[1])) {
368
- return _listeners__WEBPACK_IMPORTED_MODULE_4__.addStateListener.apply(null, arguments);
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);
369
387
  }
370
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isObject)(arguments[1])) {
388
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isObject)(arguments[1])) {
371
389
  return setState.apply(null, arguments);
372
390
  }
373
391
  }
@@ -375,26 +393,26 @@ function setStorageUtils(storageUtils) {
375
393
  Object.assign(STORAGE, storageUtils);
376
394
  }
377
395
  function addNamespace(namespace, str) {
378
- return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_3__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
396
+ return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_4__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
379
397
  }
380
398
  function createStore(_namespace) {
381
399
  const namespace = ((key) => addNamespace(_namespace, key));
382
400
  if (!STATE_PENDING_CHANGES[namespace()]) {
383
401
  STATE_PENDING_CHANGES[namespace()] = {};
384
402
  }
385
- if (!_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()]) {
386
- _listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()] = [];
403
+ if (!_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()]) {
404
+ _listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()] = [];
387
405
  }
388
406
  return Object.assign(main.bind(null, namespace), {
389
407
  add: (state) => addState(namespace, state, false),
390
408
  addPersistent: (state) => addState(namespace, state, true),
391
409
  get: (newNamespace) => getState(namespace, newNamespace),
392
- set: async (changes) => await setState(namespace, changes),
410
+ set: (changes) => setState(namespace, changes),
393
411
  reset: (keys) => resetState(namespace, keys),
394
412
  changes: createPendingChanges(namespace),
395
- onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.addStateListener)(namespace, keys, cb),
396
- removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.removeStateListener)(namespace, keys, cb),
397
- actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_2__.addStateActions)(namespace, actions),
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),
398
416
  setStorageUtils,
399
417
  joinStateChanges,
400
418
  namespace,
@@ -419,21 +437,24 @@ __webpack_require__.r(__webpack_exports__);
419
437
  /* harmony export */ removeStateListener: () => (/* binding */ removeStateListener),
420
438
  /* harmony export */ runStateChangeListeners: () => (/* binding */ runStateChangeListeners)
421
439
  /* harmony export */ });
422
- /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
423
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
424
- /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
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
+
425
446
 
426
447
 
427
448
 
428
449
  const LISTENERS = {};
429
450
  async function runStateChangeListeners(realChanges) {
430
451
  if (Object.keys(realChanges).length) {
431
- const { namespace } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[Object.keys(realChanges)[0]];
452
+ const { namespace } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[Object.keys(realChanges)[0]];
432
453
  for (const [changeKey] of Object.entries(realChanges)) {
433
- const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
454
+ const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[changeKey];
434
455
  for (const cb of listeners) {
435
- const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace()));
436
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(cb)) {
456
+ const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace()));
457
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(cb)) {
437
458
  await fn();
438
459
  }
439
460
  else {
@@ -441,11 +462,11 @@ async function runStateChangeListeners(realChanges) {
441
462
  }
442
463
  }
443
464
  }
444
- const namespaceLength = `${namespace()}${_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER}`.length;
445
- const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k) => k.slice(namespaceLength));
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));
446
467
  for (const cb of LISTENERS[namespace()]) {
447
- const fn = cb.bind(null, readableKeys, (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace()));
448
- 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)) {
449
470
  await fn();
450
471
  }
451
472
  else {
@@ -455,25 +476,25 @@ async function runStateChangeListeners(realChanges) {
455
476
  }
456
477
  }
457
478
  function addStateListener(namespace, observables, cb) {
458
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
479
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
459
480
  LISTENERS[namespace()].push(observables);
460
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
481
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
461
482
  }
462
- observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners?.push(cb));
463
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
483
+ observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners?.push(cb));
484
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
464
485
  }
465
486
  function removeStateListener(namespace, observables, removeCb) {
466
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
487
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
467
488
  const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
468
489
  LISTENERS[namespace()].splice(removeIdx, 1);
469
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
490
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
470
491
  }
471
492
  observables.forEach((key) => {
472
- const listeners = ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners;
493
+ const listeners = ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners;
473
494
  const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
474
495
  listeners?.splice(removeIdx, 1);
475
496
  });
476
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
497
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
477
498
  }
478
499
 
479
500
 
@@ -490,6 +511,9 @@ __webpack_require__.r(__webpack_exports__);
490
511
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
491
512
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
492
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
+
493
517
  async function updateFromLocalStorage(state) {
494
518
  const stored = {};
495
519
  for (const key in state) {
@@ -541,7 +565,10 @@ __webpack_require__.r(__webpack_exports__);
541
565
  /* harmony export */ isBackgroundScript: () => (/* binding */ isBackgroundScript),
542
566
  /* harmony export */ isSessionStorageSupport: () => (/* binding */ isSessionStorageSupport)
543
567
  /* harmony export */ });
568
+ /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
569
+ /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
544
570
  const browser = __webpack_require__(/*! webextension-polyfill/dist/browser-polyfill.min */ "./node_modules/webextension-polyfill/dist/browser-polyfill.min.js");
571
+
545
572
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
546
573
  GET_TYPE: getStorageType,
547
574
  IS_AVAILABE: isStorageAvailable,
@@ -634,6 +661,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
634
661
  /******/ }
635
662
  /******/
636
663
  /************************************************************************/
664
+ /******/ /* webpack/runtime/compat get default export */
665
+ /******/ (() => {
666
+ /******/ // getDefaultExport function for compatibility with non-harmony modules
667
+ /******/ __webpack_require__.n = (module) => {
668
+ /******/ const getter = module && module.__esModule ?
669
+ /******/ () => (module['default']) :
670
+ /******/ () => (module);
671
+ /******/ __webpack_require__.d(getter, { a: getter });
672
+ /******/ return getter;
673
+ /******/ };
674
+ /******/ })();
675
+ /******/
637
676
  /******/ /* webpack/runtime/define property getters */
638
677
  /******/ (() => {
639
678
  /******/ // define getter/value functions for harmony exports
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see varstor-webextension.min.js.LICENSE.txt */
2
- !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Varstor=r():e.Varstor=r()}(this,()=>(()=>{var e={"./src/actions.ts"(e,r,s){"use strict";s.r(r),s.d(r,{addStateActions:()=>n});var t=s("./src/index.ts");function n(e,r){for(const[s,n]of Object.entries(r))t.STATE[e(s)]={key:s,namespace:e,value:n.bind(null,(0,t.createStore)(e())),isAction:!0,listeners:[]}}},"./src/constants.ts"(e,r,s){"use strict";s.r(r),s.d(r,{NAMESPACE_DELIMITER:()=>t});const t="::"},"./src/helpers.ts"(e,r,s){"use strict";s.r(r),s.d(r,{filter:()=>d,forEach:()=>u,getParamNames:()=>l,isArray:()=>a,isAsyncFunction:()=>g,isFunction:()=>i,isObject:()=>m,isString:()=>o,map:()=>A,recreateStructure:()=>f,uid:()=>x});const t=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,n=/([^\s,]+)/g;function a(e){return"[object Array]"===c(e)}function o(e){return"[object String]"===c(e)}function i(e){return"[object Function]"===c(e)}function g(e){return"[object AsyncFunction]"===c(e)}function m(e){return"[object Object]"===c(e)}function c(e){return Object.prototype.toString.call(e)}function l(e){const r=e.toString().replace(t,"").split("=>")[0],s=r.slice(r.indexOf("(")+1,r.indexOf(")")).match(n);return null===s?[]:s}function A(e,r){const s=Object.entries(e).map(([e,s])=>r(e,s));return 2===s[0]?.length?Object.fromEntries(s):s}function u(e,r){Object.entries(e||{}).forEach(([e,s])=>r(e,s))}function d(e,r){return Object.fromEntries(Object.entries(e||{}).filter(([e,s])=>!0===r(e,s)))}function f(e){let r=e;if(a(e))return r=[],e.forEach(e=>r.push(f(e))),r;if(m(e)){r={};for(let s in e)r[s]=f(e[s]);return r}return r}function x(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}},"./src/index.ts"(e,r,s){"use strict";s.r(r),s.d(r,{STATE:()=>g,createPendingChanges:()=>v,createStore:()=>O,default:()=>C,getState:()=>h,getValues:()=>f,joinStateChanges:()=>p,resetState:()=>w,setState:()=>S,setupValue:()=>u});var t=s("./src/storage.ts"),n=s("./src/helpers.ts"),a=s("./src/actions.ts"),o=s("./src/constants.ts"),i=s("./src/listeners.ts");const g={},m={},c={},l={};async function A(e,r,s){const t=l.GET_TYPE(s),a=Object.assign({},r),o=(0,n.map)(r,(r,s)=>[e(r),s]);l.IS_AVAILABE(t)&&await l.UPDATE_STATE(o,t);for(const s in r){const r=e(s);g[r]=u(s,e,o[r],a[s],t)}return O(e())}function u(e,r,s,t,a){const o=r(e),i=(0,n.isFunction)(s),m=i?(0,n.getParamNames)(s):[];return m.forEach(e=>{const s=r(e);g[s]||(g[s]={dependants:[],dependencies:[],namespace:r,storageType:a}),g[s].dependants?.push(o)}),{key:e,fullKey:o,value:i?s.apply(null,x(m,r)):s,computeFn:i&&s,dependencies:m,dependants:[],listeners:[],defaultValue:t,storageType:a,namespace:r}}function d(e){return(0,n.filter)(g,(r,{key:s})=>r===e(s))}function f(e){return(0,n.map)(d(e),(e,{key:r,value:s})=>[r,s])}function x(e,r){const s=f(r);return e.map(e=>s[e])}async function p(e){for(const[r,{storageTypes:s,readyStorageTypes:t,changes:n}]of Object.entries(m))if(e[r]){const a=e[r].newValue;t[a]=!0,delete e[r],Object.assign(n,e),l.IS_AVAILABE(a)&&l.REMOVE_KEY(a,r);for(const e in s)if(!t[e])return;delete m[r],await b(n)}}async function b(e){const r={};for(const s in e){const t=g[s].value,n=e[s].newValue;t!==n?(r[s]={newValue:n,prevValue:t},g[s].value=n):r[s]={isSame:!0},y(s,e,r)}await(0,i.runStateChangeListeners)((0,n.filter)(r,(e,r)=>!r.isSame))}function y(e,r,s){g[e].dependants?.forEach(e=>{const{dependencies:t,namespace:n}=g[e];if(!function(e,r,s,t){return e.every(e=>{const n=r(e);return s.includes(n)&&t.includes(n)||!s.includes(n)})}(t,n,Object.keys(r),Object.keys(s))||s[e])return;const a=g[e].value,o=g[e].computeFn?.apply(null,x(t,n));a!==o&&(s[e]={newValue:o,prevValue:a},g[e].value=o,y(e,r,s))})}function h(e,r){return(0,n.isString)(r)?O(r):(0,n.recreateStructure)(f(e))}async function S(e,r){const s={},t=(0,n.uid)(),a={};(0,n.forEach)(r,(r,t)=>{const n=e(r),{storageType:o,computeFn:i,isAction:m}=g[n];i||m||(s[o]||(s[o]={}),a[o]=!0,s[o][n]=t)}),m[t]={storageTypes:a,readyStorageTypes:{},changes:{}};for(let[e,r]of Object.entries(s))await E(e,{...r,[t]:e});return O(e())}async function E(e,r){if(l.IS_AVAILABE(e)){if(await l.SET_VALUES(e,r))return}p((0,n.map)(r,(e,r)=>[e,{newValue:r}]))}async function w(e,r){return await S(e,T(e,r)),O(e())}function T(e,r){const s=d(e);return(0,n.map)(r?(0,n.filter)(s,(e,{key:s})=>r.includes(s)):s,(e,{key:r,defaultValue:s})=>[r,s])}function v(e){const r=()=>{const r=c[e()];return c[e()]={},r};return{add:r=>Object.assign(c[e()],r),reset:r=>Object.assign(c[e()],T(e,r)),get:()=>c[e()],flush:r,commit:()=>S(e,r())}}function k(e){return!arguments[1]||(0,n.isString)(arguments[1])?h.apply(null,arguments):(0,n.isArray)(arguments[1])||(0,n.isFunction)(arguments[1])||(0,n.isAsyncFunction)(arguments[1])?i.addStateListener.apply(null,arguments):(0,n.isObject)(arguments[1])?S.apply(null,arguments):void 0}function j(e){Object.assign(l,e)}function O(e){const r=r=>function(e,r){return`${e}${(0,n.isString)(r)&&o.NAMESPACE_DELIMITER||""}${r||""}`}(e,r);return c[r()]||(c[r()]={}),i.LISTENERS[r()]||(i.LISTENERS[r()]=[]),Object.assign(k.bind(null,r),{add:e=>A(r,e,!1),addPersistent:e=>A(r,e,!0),get:e=>h(r,e),set:async e=>await S(r,e),reset:e=>w(r,e),changes:v(r),onChange:(e,s)=>(0,i.addStateListener)(r,e,s),removeListener:(e,s)=>(0,i.removeStateListener)(r,e,s),actions:e=>(0,a.addStateActions)(r,e),setStorageUtils:j,joinStateChanges:p,namespace:r})}j(t.default);const C=O("")},"./src/listeners.ts"(e,r,s){"use strict";s.r(r),s.d(r,{LISTENERS:()=>o,addStateListener:()=>g,removeStateListener:()=>m,runStateChangeListeners:()=>i});var t=s("./src/index.ts"),n=s("./src/constants.ts"),a=s("./src/helpers.ts");const o={};async function i(e){if(Object.keys(e).length){const{namespace:r}=t.STATE[Object.keys(e)[0]];for(const[s]of Object.entries(e)){const{listeners:e,key:n}=t.STATE[s];for(const s of e){const e=s.bind(null,[n],(0,t.createStore)(r()));(0,a.isAsyncFunction)(s)?await e():e()}}const s=`${r()}${n.NAMESPACE_DELIMITER}`.length,i=(0,a.map)(e,e=>e.slice(s));for(const e of o[r()]){const s=e.bind(null,i,(0,t.createStore)(r()));(0,a.isAsyncFunction)(e)?await s():s()}}}function g(e,r,s){return(0,a.isFunction)(r)||(0,a.isAsyncFunction)(r)?(o[e()].push(r),(0,t.createStore)(e())):(r.forEach(r=>t.STATE[e(r)].listeners?.push(s)),(0,t.createStore)(e()))}function m(e,r,s){if((0,a.isFunction)(r)||(0,a.isAsyncFunction)(r)){const s=o[e()].findIndex(e=>e===r);return o[e()].splice(s,1),(0,t.createStore)(e())}return r.forEach(r=>{const n=t.STATE[e(r)].listeners,a=n?.findIndex(e=>e===s);n?.splice(a,1)}),(0,t.createStore)(e())}},"./src/storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>t});const t={GET_TYPE:function(e){return e?"localStorage":""},IS_AVAILABE:function(e){return!!e},UPDATE_STATE:async function(e){const r={};for(const s in e){const e=localStorage.getItem(s);null!==e&&(r[s]=e)}return Object.assign(e,r)},SET_VALUES:async function(e,r){for(let[e,s]of Object.entries(r))localStorage.setItem(e,s);return!1},REMOVE_KEY:function(e,r){e&&localStorage.removeItem(r)}}},"./src/webextension-storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>n,isBackgroundScript:()=>o,isSessionStorageSupport:()=>a});const t=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),n={GET_TYPE:function(e){return o()&&e?"local":"session"},IS_AVAILABE:function(e){return"local"===e||"session"===e&&a()},UPDATE_STATE:async function(e,r){return Object.assign(e,await t.storage[r].get())},SET_VALUES:async function(e,r){return await t.storage[e].set(r),!0},REMOVE_KEY:async function(e,r){e&&await t.storage[e].remove(r)}};function a(){return!!t.storage.session}function o(){return"chrome-extension:"===window.location.protocol||"moz-extension:"===window.location.protocol}},"./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"(e,r){var s,t,n;"undefined"==typeof globalThis?"undefined"==typeof self||self:globalThis,t=[e],void 0===(n="function"==typeof(s=function(e){"use strict";if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id?e.exports=globalThis.browser:e.exports=(e=>{const r={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(r).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class s extends WeakMap{constructor(e,r=void 0){super(r),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const t=e=>e&&"object"==typeof e&&"function"==typeof e.then,n=(r,s)=>(...t)=>{e.runtime.lastError?r.reject(new Error(e.runtime.lastError.message)):s.singleCallbackArg||1>=t.length&&!1!==s.singleCallbackArg?r.resolve(t[0]):r.resolve(t)},a=e=>1==e?"argument":"arguments",o=(e,r)=>function(s,...t){if(t.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${t.length}`);if(t.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${t.length}`);return new Promise((a,o)=>{if(r.fallbackToNoCallback)try{s[e](...t,n({resolve:a,reject:o},r))}catch(n){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,n),s[e](...t),r.fallbackToNoCallback=!1,r.noCallback=!0,a()}else r.noCallback?(s[e](...t),a()):s[e](...t,n({resolve:a,reject:o},r))})},i=(e,r,s)=>new Proxy(r,{apply:(r,t,n)=>s.call(t,e,...n)});let g=Function.call.bind(Object.prototype.hasOwnProperty);const m=(e,r={},s={})=>{let t=Object.create(null),n=Object.create(e);return new Proxy(n,{has:(r,s)=>s in e||s in t,get(n,a){if(a in t)return t[a];if(!(a in e))return;let c=e[a];if("function"==typeof c)if("function"==typeof r[a])c=i(e,e[a],r[a]);else if(g(s,a)){let r=o(a,s[a]);c=i(e,e[a],r)}else c=c.bind(e);else if("object"==typeof c&&null!==c&&(g(r,a)||g(s,a)))c=m(c,r[a],s[a]);else{if(!g(s,"*"))return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:()=>e[a],set(r){e[a]=r}}),c;c=m(c,r[a],s["*"])}return t[a]=c,c},set:(r,s,n)=>(s in t?t[s]=n:e[s]=n,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(t,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(t,r)})},c=e=>({addListener(r,s,...t){r.addListener(e.get(s),...t)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}}),l=new s(e=>"function"==typeof e?function(r){const s=m(r,{},{getContent:{minArgs:0,maxArgs:0}});e(s)}:e),A=new s(e=>"function"==typeof e?function(r,s,n){let a,o,i=!1,g=new Promise(e=>{a=function(r){i=!0,e(r)}});try{o=e(r,s,a)}catch(e){o=Promise.reject(e)}const m=!0!==o&&t(o);if(!0!==o&&!m&&!i)return!1;const c=e=>{e.then(e=>{n(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",n({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{console.error("Failed to send onMessage rejected reply",e)})};return c(m?o:g),!0}:e),u=({reject:r,resolve:s},t)=>{e.runtime.lastError?"The message port closed before a response was received."===e.runtime.lastError.message?s():r(new Error(e.runtime.lastError.message)):t&&t.__mozWebExtensionPolyfillReject__?r(new Error(t.message)):s(t)},d=(e,r,s,...t)=>{if(t.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${t.length}`);if(t.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${t.length}`);return new Promise((e,r)=>{const n=u.bind(null,{resolve:e,reject:r});t.push(n),s.sendMessage(...t)})},f={devtools:{network:{onRequestFinished:c(l)}},runtime:{onMessage:c(A),onMessageExternal:c(A),sendMessage:d.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:d.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},x={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return r.privacy={network:{"*":x},services:{"*":x},websites:{"*":x}},m(e,f,r)})(chrome)})?s.apply(r,t):s)||(e.exports=n)}};const r={};function s(t){const n=r[t];if(void 0!==n)return n.exports;const a=r[t]={exports:{}};if(!(t in e)){delete r[t];const e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return e[t].call(a.exports,a,a.exports,s),a.exports}s.d=(e,r)=>{if(Array.isArray(r))for(var t=0;t<r.length;){var n=r[t++],a=r[t++];s.o(e,n)?0===a&&t++:0===a?Object.defineProperty(e,n,{enumerable:!0,value:r[t++]}):Object.defineProperty(e,n,{enumerable:!0,get:a})}else for(var n in r)s.o(r,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},s.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),s.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let t={};return(()=>{"use strict";s.r(t),s.d(t,{default:()=>i});var e=s("./src/index.ts"),r=s("./src/webextension-storage.ts");const n=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),{joinStateChanges:a,setStorageUtils:o}=e.default;(0,r.isBackgroundScript)()&&(n.storage.local.onChanged.addListener(a),(0,r.isSessionStorageSupport)()&&n.storage.session.onChanged.addListener(a)),o(r.default);const i=e.default})(),t=t.default,t})());
2
+ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports.Varstor=r():e.Varstor=r()}(this,()=>(()=>{var e={"./src/types.d.ts"(){},"./src/actions.ts"(e,r,s){"use strict";s.r(r),s.d(r,{addStateActions:()=>n});s("./src/types.d.ts");var t=s("./src/index.ts");function n(e,r){for(const[s,n]of Object.entries(r))t.STATE[e(s)]={key:s,namespace:e,value:n.bind(null,(0,t.createStore)(e())),isAction:!0,listeners:[]};return(0,t.createStore)(e())}},"./src/constants.ts"(e,r,s){"use strict";s.r(r),s.d(r,{NAMESPACE_DELIMITER:()=>t});const t="::"},"./src/helpers.ts"(e,r,s){"use strict";s.r(r),s.d(r,{filter:()=>d,forEach:()=>u,getParamNames:()=>l,isArray:()=>a,isAsyncFunction:()=>g,isFunction:()=>i,isObject:()=>m,isString:()=>o,map:()=>A,recreateStructure:()=>f,uid:()=>x});const t=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,n=/([^\s,]+)/g;function a(e){return"[object Array]"===c(e)}function o(e){return"[object String]"===c(e)}function i(e){return"[object Function]"===c(e)}function g(e){return"[object AsyncFunction]"===c(e)}function m(e){return"[object Object]"===c(e)}function c(e){return Object.prototype.toString.call(e)}function l(e){const r=e.toString().replace(t,"").split("=>")[0],s=r.slice(r.indexOf("(")+1,r.indexOf(")")).match(n);return null===s?[]:s}function A(e,r){const s=Object.entries(e).map(([e,s])=>r(e,s));return 2===s[0]?.length?Object.fromEntries(s):s}function u(e,r){Object.entries(e||{}).forEach(([e,s])=>r(e,s))}function d(e,r){return Object.fromEntries(Object.entries(e||{}).filter(([e,s])=>!0===r(e,s)))}function f(e){let r=e;if(a(e))return r=[],e.forEach(e=>r.push(f(e))),r;if(m(e)){r={};for(let s in e)r[s]=f(e[s]);return r}return r}function x(){return Date.now().toString(36)+Math.random().toString(36).substr(2)}},"./src/index.ts"(e,r,s){"use strict";s.r(r),s.d(r,{STATE:()=>g,createPendingChanges:()=>v,createStore:()=>O,default:()=>C,getState:()=>h,getValues:()=>f,joinStateChanges:()=>p,resetState:()=>w,setState:()=>S,setupValue:()=>u});s("./src/types.d.ts");var t=s("./src/storage.ts"),n=s("./src/helpers.ts"),a=s("./src/actions.ts"),o=s("./src/constants.ts"),i=s("./src/listeners.ts");const g={},m={},c={},l={};async function A(e,r,s){const t=l.GET_TYPE(s),a=Object.assign({},r),o=(0,n.map)(r,(r,s)=>[e(r),s]);l.IS_AVAILABE(t)&&await l.UPDATE_STATE(o,t);for(const s in r){const r=e(s);g[r]=u(s,e,o[r],a[s],t)}return O(e())}function u(e,r,s,t,a){const o=r(e),i=(0,n.isFunction)(s),m=i?(0,n.getParamNames)(s):[];return m.forEach(e=>{const s=r(e);g[s]||(g[s]={dependants:[],dependencies:[],namespace:r,storageType:a}),g[s].dependants?.push(o)}),{key:e,fullKey:o,value:i?s.apply(null,x(m,r)):s,computeFn:i&&s,dependencies:m,dependants:[],listeners:[],defaultValue:t,storageType:a,namespace:r}}function d(e){return(0,n.filter)(g,(r,{key:s})=>r===e(s))}function f(e){return(0,n.map)(d(e),(e,{key:r,value:s})=>[r,s])}function x(e,r){const s=f(r);return e.map(e=>s[e])}async function p(e){for(const[r,{storageTypes:s,readyStorageTypes:t,changes:n}]of Object.entries(m))if(e[r]){const a=e[r].newValue;t[a]=!0,delete e[r],Object.assign(n,e),l.IS_AVAILABE(a)&&l.REMOVE_KEY(a,r);for(const e in s)if(!t[e])return;delete m[r],await b(n)}}async function b(e){const r={};for(const s in e){const t=g[s].value,n=e[s].newValue;t!==n?(r[s]={newValue:n,prevValue:t},g[s].value=n):r[s]={isSame:!0},y(s,e,r)}await(0,i.runStateChangeListeners)((0,n.filter)(r,(e,r)=>!r.isSame))}function y(e,r,s){g[e].dependants?.forEach(e=>{const{dependencies:t,namespace:n}=g[e];if(!function(e,r,s,t){return e.every(e=>{const n=r(e);return s.includes(n)&&t.includes(n)||!s.includes(n)})}(t,n,Object.keys(r),Object.keys(s))||s[e])return;const a=g[e].value,o=g[e].computeFn?.apply(null,x(t,n));a!==o&&(s[e]={newValue:o,prevValue:a},g[e].value=o,y(e,r,s))})}function h(e,r){return(0,n.isString)(r)?O(r):(0,n.recreateStructure)(f(e))}async function S(e,r){const s={},t=(0,n.uid)(),a={};(0,n.forEach)(r,(r,t)=>{const n=e(r),{storageType:o,computeFn:i,isAction:m}=g[n];i||m||(s[o]||(s[o]={}),a[o]=!0,s[o][n]=t)}),m[t]={storageTypes:a,readyStorageTypes:{},changes:{}};for(let[e,r]of Object.entries(s))await E(e,{...r,[t]:e});return O(e())}async function E(e,r){if(l.IS_AVAILABE(e)){if(await l.SET_VALUES(e,r))return}p((0,n.map)(r,(e,r)=>[e,{newValue:r}]))}async function w(e,r){return S(e,T(e,r))}function T(e,r){const s=d(e);return(0,n.map)(r?(0,n.filter)(s,(e,{key:s})=>r.includes(s)):s,(e,{key:r,defaultValue:s})=>[r,s])}function v(e){const r=()=>{const r=c[e()];return c[e()]={},r};return{add:r=>Object.assign(c[e()],r),reset:r=>Object.assign(c[e()],T(e,r)),get:()=>c[e()],flush:r,commit:()=>S(e,r())}}function k(e){return!arguments[1]||(0,n.isString)(arguments[1])?h.apply(null,arguments):(0,n.isArray)(arguments[1])||(0,n.isFunction)(arguments[1])||(0,n.isAsyncFunction)(arguments[1])?i.addStateListener.apply(null,arguments):(0,n.isObject)(arguments[1])?S.apply(null,arguments):void 0}function j(e){Object.assign(l,e)}function O(e){const r=r=>function(e,r){return`${e}${(0,n.isString)(r)&&o.NAMESPACE_DELIMITER||""}${r||""}`}(e,r);return c[r()]||(c[r()]={}),i.LISTENERS[r()]||(i.LISTENERS[r()]=[]),Object.assign(k.bind(null,r),{add:e=>A(r,e,!1),addPersistent:e=>A(r,e,!0),get:e=>h(r,e),set:e=>S(r,e),reset:e=>w(r,e),changes:v(r),onChange:(e,s)=>(0,i.addStateListener)(r,e,s),removeListener:(e,s)=>(0,i.removeStateListener)(r,e,s),actions:e=>(0,a.addStateActions)(r,e),setStorageUtils:j,joinStateChanges:p,namespace:r})}j(t.default);const C=O("")},"./src/listeners.ts"(e,r,s){"use strict";s.r(r),s.d(r,{LISTENERS:()=>o,addStateListener:()=>g,removeStateListener:()=>m,runStateChangeListeners:()=>i});s("./src/types.d.ts");var t=s("./src/index.ts"),n=s("./src/constants.ts"),a=s("./src/helpers.ts");const o={};async function i(e){if(Object.keys(e).length){const{namespace:r}=t.STATE[Object.keys(e)[0]];for(const[s]of Object.entries(e)){const{listeners:e,key:n}=t.STATE[s];for(const s of e){const e=s.bind(null,[n],(0,t.createStore)(r()));(0,a.isAsyncFunction)(s)?await e():e()}}const s=`${r()}${n.NAMESPACE_DELIMITER}`.length,i=(0,a.map)(e,e=>e.slice(s));for(const e of o[r()]){const s=e.bind(null,i,(0,t.createStore)(r()));(0,a.isAsyncFunction)(e)?await s():s()}}}function g(e,r,s){return(0,a.isFunction)(r)||(0,a.isAsyncFunction)(r)?(o[e()].push(r),(0,t.createStore)(e())):(r.forEach(r=>t.STATE[e(r)].listeners?.push(s)),(0,t.createStore)(e()))}function m(e,r,s){if((0,a.isFunction)(r)||(0,a.isAsyncFunction)(r)){const s=o[e()].findIndex(e=>e===r);return o[e()].splice(s,1),(0,t.createStore)(e())}return r.forEach(r=>{const n=t.STATE[e(r)].listeners,a=n?.findIndex(e=>e===s);n?.splice(a,1)}),(0,t.createStore)(e())}},"./src/storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>t});s("./src/types.d.ts");const t={GET_TYPE:function(e){return e?"localStorage":""},IS_AVAILABE:function(e){return!!e},UPDATE_STATE:async function(e){const r={};for(const s in e){const e=localStorage.getItem(s);null!==e&&(r[s]=e)}return Object.assign(e,r)},SET_VALUES:async function(e,r){for(let[e,s]of Object.entries(r))localStorage.setItem(e,s);return!1},REMOVE_KEY:function(e,r){e&&localStorage.removeItem(r)}}},"./src/webextension-storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>n,isBackgroundScript:()=>o,isSessionStorageSupport:()=>a});s("./src/types.d.ts");const t=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),n={GET_TYPE:function(e){return o()&&e?"local":"session"},IS_AVAILABE:function(e){return"local"===e||"session"===e&&a()},UPDATE_STATE:async function(e,r){return Object.assign(e,await t.storage[r].get())},SET_VALUES:async function(e,r){return await t.storage[e].set(r),!0},REMOVE_KEY:async function(e,r){e&&await t.storage[e].remove(r)}};function a(){return!!t.storage.session}function o(){return"chrome-extension:"===window.location.protocol||"moz-extension:"===window.location.protocol}},"./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"(e,r){var s,t,n;"undefined"==typeof globalThis?"undefined"==typeof self||self:globalThis,t=[e],void 0===(n="function"==typeof(s=function(e){"use strict";if(!(globalThis.chrome&&globalThis.chrome.runtime&&globalThis.chrome.runtime.id))throw new Error("This script should only be loaded in a browser extension.");globalThis.browser&&globalThis.browser.runtime&&globalThis.browser.runtime.id?e.exports=globalThis.browser:e.exports=(e=>{const r={alarms:{clear:{minArgs:0,maxArgs:1},clearAll:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getAll:{minArgs:0,maxArgs:0}},bookmarks:{create:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},getChildren:{minArgs:1,maxArgs:1},getRecent:{minArgs:1,maxArgs:1},getSubTree:{minArgs:1,maxArgs:1},getTree:{minArgs:0,maxArgs:0},move:{minArgs:2,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeTree:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}},browserAction:{disable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},enable:{minArgs:0,maxArgs:1,fallbackToNoCallback:!0},getBadgeBackgroundColor:{minArgs:1,maxArgs:1},getBadgeText:{minArgs:1,maxArgs:1},getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},openPopup:{minArgs:0,maxArgs:0},setBadgeBackgroundColor:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setBadgeText:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},browsingData:{remove:{minArgs:2,maxArgs:2},removeCache:{minArgs:1,maxArgs:1},removeCookies:{minArgs:1,maxArgs:1},removeDownloads:{minArgs:1,maxArgs:1},removeFormData:{minArgs:1,maxArgs:1},removeHistory:{minArgs:1,maxArgs:1},removeLocalStorage:{minArgs:1,maxArgs:1},removePasswords:{minArgs:1,maxArgs:1},removePluginData:{minArgs:1,maxArgs:1},settings:{minArgs:0,maxArgs:0}},commands:{getAll:{minArgs:0,maxArgs:0}},contextMenus:{remove:{minArgs:1,maxArgs:1},removeAll:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},cookies:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:1,maxArgs:1},getAllCookieStores:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},devtools:{inspectedWindow:{eval:{minArgs:1,maxArgs:2,singleCallbackArg:!1}},panels:{create:{minArgs:3,maxArgs:3,singleCallbackArg:!0},elements:{createSidebarPane:{minArgs:1,maxArgs:1}}}},downloads:{cancel:{minArgs:1,maxArgs:1},download:{minArgs:1,maxArgs:1},erase:{minArgs:1,maxArgs:1},getFileIcon:{minArgs:1,maxArgs:2},open:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},pause:{minArgs:1,maxArgs:1},removeFile:{minArgs:1,maxArgs:1},resume:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},extension:{isAllowedFileSchemeAccess:{minArgs:0,maxArgs:0},isAllowedIncognitoAccess:{minArgs:0,maxArgs:0}},history:{addUrl:{minArgs:1,maxArgs:1},deleteAll:{minArgs:0,maxArgs:0},deleteRange:{minArgs:1,maxArgs:1},deleteUrl:{minArgs:1,maxArgs:1},getVisits:{minArgs:1,maxArgs:1},search:{minArgs:1,maxArgs:1}},i18n:{detectLanguage:{minArgs:1,maxArgs:1},getAcceptLanguages:{minArgs:0,maxArgs:0}},identity:{launchWebAuthFlow:{minArgs:1,maxArgs:1}},idle:{queryState:{minArgs:1,maxArgs:1}},management:{get:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},getSelf:{minArgs:0,maxArgs:0},setEnabled:{minArgs:2,maxArgs:2},uninstallSelf:{minArgs:0,maxArgs:1}},notifications:{clear:{minArgs:1,maxArgs:1},create:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:0},getPermissionLevel:{minArgs:0,maxArgs:0},update:{minArgs:2,maxArgs:2}},pageAction:{getPopup:{minArgs:1,maxArgs:1},getTitle:{minArgs:1,maxArgs:1},hide:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setIcon:{minArgs:1,maxArgs:1},setPopup:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},setTitle:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0},show:{minArgs:1,maxArgs:1,fallbackToNoCallback:!0}},permissions:{contains:{minArgs:1,maxArgs:1},getAll:{minArgs:0,maxArgs:0},remove:{minArgs:1,maxArgs:1},request:{minArgs:1,maxArgs:1}},runtime:{getBackgroundPage:{minArgs:0,maxArgs:0},getPlatformInfo:{minArgs:0,maxArgs:0},openOptionsPage:{minArgs:0,maxArgs:0},requestUpdateCheck:{minArgs:0,maxArgs:0},sendMessage:{minArgs:1,maxArgs:3},sendNativeMessage:{minArgs:2,maxArgs:2},setUninstallURL:{minArgs:1,maxArgs:1}},sessions:{getDevices:{minArgs:0,maxArgs:1},getRecentlyClosed:{minArgs:0,maxArgs:1},restore:{minArgs:0,maxArgs:1}},storage:{local:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}},managed:{get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1}},sync:{clear:{minArgs:0,maxArgs:0},get:{minArgs:0,maxArgs:1},getBytesInUse:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}}},tabs:{captureVisibleTab:{minArgs:0,maxArgs:2},create:{minArgs:1,maxArgs:1},detectLanguage:{minArgs:0,maxArgs:1},discard:{minArgs:0,maxArgs:1},duplicate:{minArgs:1,maxArgs:1},executeScript:{minArgs:1,maxArgs:2},get:{minArgs:1,maxArgs:1},getCurrent:{minArgs:0,maxArgs:0},getZoom:{minArgs:0,maxArgs:1},getZoomSettings:{minArgs:0,maxArgs:1},goBack:{minArgs:0,maxArgs:1},goForward:{minArgs:0,maxArgs:1},highlight:{minArgs:1,maxArgs:1},insertCSS:{minArgs:1,maxArgs:2},move:{minArgs:2,maxArgs:2},query:{minArgs:1,maxArgs:1},reload:{minArgs:0,maxArgs:2},remove:{minArgs:1,maxArgs:1},removeCSS:{minArgs:1,maxArgs:2},sendMessage:{minArgs:2,maxArgs:3},setZoom:{minArgs:1,maxArgs:2},setZoomSettings:{minArgs:1,maxArgs:2},update:{minArgs:1,maxArgs:2}},topSites:{get:{minArgs:0,maxArgs:0}},webNavigation:{getAllFrames:{minArgs:1,maxArgs:1},getFrame:{minArgs:1,maxArgs:1}},webRequest:{handlerBehaviorChanged:{minArgs:0,maxArgs:0}},windows:{create:{minArgs:0,maxArgs:1},get:{minArgs:1,maxArgs:2},getAll:{minArgs:0,maxArgs:1},getCurrent:{minArgs:0,maxArgs:1},getLastFocused:{minArgs:0,maxArgs:1},remove:{minArgs:1,maxArgs:1},update:{minArgs:2,maxArgs:2}}};if(0===Object.keys(r).length)throw new Error("api-metadata.json has not been included in browser-polyfill");class s extends WeakMap{constructor(e,r=void 0){super(r),this.createItem=e}get(e){return this.has(e)||this.set(e,this.createItem(e)),super.get(e)}}const t=e=>e&&"object"==typeof e&&"function"==typeof e.then,n=(r,s)=>(...t)=>{e.runtime.lastError?r.reject(new Error(e.runtime.lastError.message)):s.singleCallbackArg||1>=t.length&&!1!==s.singleCallbackArg?r.resolve(t[0]):r.resolve(t)},a=e=>1==e?"argument":"arguments",o=(e,r)=>function(s,...t){if(t.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${t.length}`);if(t.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${t.length}`);return new Promise((a,o)=>{if(r.fallbackToNoCallback)try{s[e](...t,n({resolve:a,reject:o},r))}catch(n){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,n),s[e](...t),r.fallbackToNoCallback=!1,r.noCallback=!0,a()}else r.noCallback?(s[e](...t),a()):s[e](...t,n({resolve:a,reject:o},r))})},i=(e,r,s)=>new Proxy(r,{apply:(r,t,n)=>s.call(t,e,...n)});let g=Function.call.bind(Object.prototype.hasOwnProperty);const m=(e,r={},s={})=>{let t=Object.create(null),n=Object.create(e);return new Proxy(n,{has:(r,s)=>s in e||s in t,get(n,a){if(a in t)return t[a];if(!(a in e))return;let c=e[a];if("function"==typeof c)if("function"==typeof r[a])c=i(e,e[a],r[a]);else if(g(s,a)){let r=o(a,s[a]);c=i(e,e[a],r)}else c=c.bind(e);else if("object"==typeof c&&null!==c&&(g(r,a)||g(s,a)))c=m(c,r[a],s[a]);else{if(!g(s,"*"))return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:()=>e[a],set(r){e[a]=r}}),c;c=m(c,r[a],s["*"])}return t[a]=c,c},set:(r,s,n)=>(s in t?t[s]=n:e[s]=n,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(t,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(t,r)})},c=e=>({addListener(r,s,...t){r.addListener(e.get(s),...t)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}}),l=new s(e=>"function"==typeof e?function(r){const s=m(r,{},{getContent:{minArgs:0,maxArgs:0}});e(s)}:e),A=new s(e=>"function"==typeof e?function(r,s,n){let a,o,i=!1,g=new Promise(e=>{a=function(r){i=!0,e(r)}});try{o=e(r,s,a)}catch(e){o=Promise.reject(e)}const m=!0!==o&&t(o);if(!0!==o&&!m&&!i)return!1;const c=e=>{e.then(e=>{n(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",n({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{console.error("Failed to send onMessage rejected reply",e)})};return c(m?o:g),!0}:e),u=({reject:r,resolve:s},t)=>{e.runtime.lastError?"The message port closed before a response was received."===e.runtime.lastError.message?s():r(new Error(e.runtime.lastError.message)):t&&t.__mozWebExtensionPolyfillReject__?r(new Error(t.message)):s(t)},d=(e,r,s,...t)=>{if(t.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${t.length}`);if(t.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${t.length}`);return new Promise((e,r)=>{const n=u.bind(null,{resolve:e,reject:r});t.push(n),s.sendMessage(...t)})},f={devtools:{network:{onRequestFinished:c(l)}},runtime:{onMessage:c(A),onMessageExternal:c(A),sendMessage:d.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:d.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},x={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return r.privacy={network:{"*":x},services:{"*":x},websites:{"*":x}},m(e,f,r)})(chrome)})?s.apply(r,t):s)||(e.exports=n)}};const r={};function s(t){const n=r[t];if(void 0!==n)return n.exports;const a=r[t]={exports:{}};if(!(t in e)){delete r[t];const e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return e[t].call(a.exports,a,a.exports,s),a.exports}s.n=e=>{const r=e&&e.__esModule?()=>e.default:()=>e;return s.d(r,{a:r}),r},s.d=(e,r)=>{if(Array.isArray(r))for(var t=0;t<r.length;){var n=r[t++],a=r[t++];s.o(e,n)?0===a&&t++:0===a?Object.defineProperty(e,n,{enumerable:!0,value:r[t++]}):Object.defineProperty(e,n,{enumerable:!0,get:a})}else for(var n in r)s.o(r,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},s.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),s.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let t={};return(()=>{"use strict";s.r(t),s.d(t,{default:()=>i});var e=s("./src/index.ts"),r=s("./src/webextension-storage.ts");const n=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),{joinStateChanges:a,setStorageUtils:o}=e.default;(0,r.isBackgroundScript)()&&(n.storage.local.onChanged.addListener(a),(0,r.isSessionStorageSupport)()&&n.storage.session.onChanged.addListener(a)),o(r.default);const i=e.default})(),t=t.default,t})());
package/dist/varstor.js CHANGED
@@ -9,31 +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 ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
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
41
  for (const [actionName, actionFn] of Object.entries(actions)) {
29
- ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(actionName)] = {
42
+ ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(actionName)] = {
30
43
  key: actionName,
31
44
  namespace,
32
- value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace())),
45
+ value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace())),
33
46
  isAction: true,
34
47
  listeners: [],
35
48
  };
36
49
  }
50
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
37
51
  }
38
52
 
39
53
 
@@ -45,6 +59,7 @@ function addStateActions(namespace, actions) {
45
59
  \**************************/
46
60
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
47
61
 
62
+ "use strict";
48
63
  __webpack_require__.r(__webpack_exports__);
49
64
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
50
65
  /* harmony export */ NAMESPACE_DELIMITER: () => (/* binding */ NAMESPACE_DELIMITER)
@@ -60,6 +75,7 @@ const NAMESPACE_DELIMITER = "::";
60
75
  \************************/
61
76
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
62
77
 
78
+ "use strict";
63
79
  __webpack_require__.r(__webpack_exports__);
64
80
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
65
81
  /* harmony export */ filter: () => (/* binding */ filter),
@@ -146,6 +162,7 @@ function uid() {
146
162
  \**********************/
147
163
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
148
164
 
165
+ "use strict";
149
166
  __webpack_require__.r(__webpack_exports__);
150
167
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
151
168
  /* harmony export */ STATE: () => (/* binding */ STATE),
@@ -159,11 +176,14 @@ __webpack_require__.r(__webpack_exports__);
159
176
  /* harmony export */ setState: () => (/* binding */ setState),
160
177
  /* harmony export */ setupValue: () => (/* binding */ setupValue)
161
178
  /* harmony export */ });
162
- /* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
163
- /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
164
- /* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
165
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
166
- /* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
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
+
167
187
 
168
188
 
169
189
 
@@ -173,11 +193,11 @@ const STATE = {};
173
193
  const STATE_CHANGED_PIECES = {};
174
194
  const STATE_PENDING_CHANGES = {};
175
195
  const STORAGE = {};
176
- setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_0__["default"]);
196
+ setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_1__["default"]);
177
197
  async function addState(namespace, initialState, isPersistent) {
178
198
  const storageType = STORAGE.GET_TYPE(isPersistent);
179
199
  const defaultValues = Object.assign({}, initialState);
180
- const values = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(initialState, (k, v) => [namespace(k), v]);
200
+ const values = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(initialState, (k, v) => [namespace(k), v]);
181
201
  if (STORAGE.IS_AVAILABE(storageType)) {
182
202
  await STORAGE.UPDATE_STATE(values, storageType);
183
203
  }
@@ -189,9 +209,9 @@ async function addState(namespace, initialState, isPersistent) {
189
209
  }
190
210
  function setupValue(key, namespace, value, defaultValue, storageType) {
191
211
  const fullKey = namespace(key);
192
- const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(value);
212
+ const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(value);
193
213
  const dependencies = isComputedValue
194
- ? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.getParamNames)(value)
214
+ ? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.getParamNames)(value)
195
215
  : [];
196
216
  dependencies.forEach((dependency) => {
197
217
  const fullDependencyKey = namespace(dependency);
@@ -221,10 +241,10 @@ function setupValue(key, namespace, value, defaultValue, storageType) {
221
241
  };
222
242
  }
223
243
  function getNamespaceState(namespace) {
224
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(STATE, (k, { key }) => k === namespace(key));
244
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(STATE, (k, { key }) => k === namespace(key));
225
245
  }
226
246
  function getValues(namespace) {
227
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(getNamespaceState(namespace), (k, { key, value }) => [
247
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(getNamespaceState(namespace), (k, { key, value }) => [
228
248
  key,
229
249
  value,
230
250
  ]);
@@ -267,7 +287,7 @@ async function onStateChange(changes) {
267
287
  }
268
288
  updateDependencies(key, changes, realChanges);
269
289
  }
270
- await (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(realChanges, (k, v) => !v.isSame));
290
+ await (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(realChanges, (k, v) => !v.isSame));
271
291
  }
272
292
  function updateDependencies(key, changes, realChanges) {
273
293
  STATE[key].dependants?.forEach((name) => {
@@ -293,16 +313,16 @@ function isEveryDependencyReady(dependencies, namespace, changesKeys, realChange
293
313
  });
294
314
  }
295
315
  function getState(namespace, arg) {
296
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arg)) {
316
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arg)) {
297
317
  return createStore(arg);
298
318
  }
299
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.recreateStructure)(getValues(namespace));
319
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.recreateStructure)(getValues(namespace));
300
320
  }
301
321
  async function setState(namespace, changes) {
302
322
  const storageChanges = {};
303
- const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.uid)();
323
+ const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.uid)();
304
324
  const storageTypes = {};
305
- (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.forEach)(changes, (k, v) => {
325
+ (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.forEach)(changes, (k, v) => {
306
326
  const fullKey = namespace(k);
307
327
  const { storageType, computeFn, isAction } = STATE[fullKey];
308
328
  if (computeFn || isAction) {
@@ -331,16 +351,15 @@ async function setValues(storageType, changes) {
331
351
  return;
332
352
  }
333
353
  }
334
- joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(changes, (k, newValue) => [k, { newValue }]));
354
+ joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(changes, (k, newValue) => [k, { newValue }]));
335
355
  }
336
356
  async function resetState(namespace, keys) {
337
- await setState(namespace, getDefaultValues(namespace, keys));
338
- return createStore(namespace());
357
+ return setState(namespace, getDefaultValues(namespace, keys));
339
358
  }
340
359
  function getDefaultValues(namespace, keys) {
341
360
  const namespaceState = getNamespaceState(namespace);
342
- return (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(keys
343
- ? (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.filter)(namespaceState, (k, { key }) => keys.includes(key))
361
+ return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(keys
362
+ ? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(namespaceState, (k, { key }) => keys.includes(key))
344
363
  : namespaceState, (k, { key, defaultValue }) => [key, defaultValue]);
345
364
  }
346
365
  function createPendingChanges(namespace) {
@@ -358,13 +377,15 @@ function createPendingChanges(namespace) {
358
377
  };
359
378
  }
360
379
  function main(namespace) {
361
- if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(arguments[1])) {
380
+ if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arguments[1])) {
362
381
  return getState.apply(null, arguments);
363
382
  }
364
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isArray)(arguments[1]) || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isFunction)(arguments[1]) || (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isAsyncFunction)(arguments[1])) {
365
- return _listeners__WEBPACK_IMPORTED_MODULE_4__.addStateListener.apply(null, arguments);
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);
366
387
  }
367
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isObject)(arguments[1])) {
388
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isObject)(arguments[1])) {
368
389
  return setState.apply(null, arguments);
369
390
  }
370
391
  }
@@ -372,26 +393,26 @@ function setStorageUtils(storageUtils) {
372
393
  Object.assign(STORAGE, storageUtils);
373
394
  }
374
395
  function addNamespace(namespace, str) {
375
- return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_3__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
396
+ return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_4__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
376
397
  }
377
398
  function createStore(_namespace) {
378
399
  const namespace = ((key) => addNamespace(_namespace, key));
379
400
  if (!STATE_PENDING_CHANGES[namespace()]) {
380
401
  STATE_PENDING_CHANGES[namespace()] = {};
381
402
  }
382
- if (!_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()]) {
383
- _listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()] = [];
403
+ if (!_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()]) {
404
+ _listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()] = [];
384
405
  }
385
406
  return Object.assign(main.bind(null, namespace), {
386
407
  add: (state) => addState(namespace, state, false),
387
408
  addPersistent: (state) => addState(namespace, state, true),
388
409
  get: (newNamespace) => getState(namespace, newNamespace),
389
- set: async (changes) => await setState(namespace, changes),
410
+ set: (changes) => setState(namespace, changes),
390
411
  reset: (keys) => resetState(namespace, keys),
391
412
  changes: createPendingChanges(namespace),
392
- onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.addStateListener)(namespace, keys, cb),
393
- removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.removeStateListener)(namespace, keys, cb),
394
- actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_2__.addStateActions)(namespace, actions),
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),
395
416
  setStorageUtils,
396
417
  joinStateChanges,
397
418
  namespace,
@@ -408,6 +429,7 @@ function createStore(_namespace) {
408
429
  \**************************/
409
430
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
410
431
 
432
+ "use strict";
411
433
  __webpack_require__.r(__webpack_exports__);
412
434
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
413
435
  /* harmony export */ LISTENERS: () => (/* binding */ LISTENERS),
@@ -415,21 +437,24 @@ __webpack_require__.r(__webpack_exports__);
415
437
  /* harmony export */ removeStateListener: () => (/* binding */ removeStateListener),
416
438
  /* harmony export */ runStateChangeListeners: () => (/* binding */ runStateChangeListeners)
417
439
  /* harmony export */ });
418
- /* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
419
- /* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
420
- /* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
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
+
421
446
 
422
447
 
423
448
 
424
449
  const LISTENERS = {};
425
450
  async function runStateChangeListeners(realChanges) {
426
451
  if (Object.keys(realChanges).length) {
427
- const { namespace } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[Object.keys(realChanges)[0]];
452
+ const { namespace } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[Object.keys(realChanges)[0]];
428
453
  for (const [changeKey] of Object.entries(realChanges)) {
429
- const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
454
+ const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[changeKey];
430
455
  for (const cb of listeners) {
431
- const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace()));
432
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(cb)) {
456
+ const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace()));
457
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(cb)) {
433
458
  await fn();
434
459
  }
435
460
  else {
@@ -437,11 +462,11 @@ async function runStateChangeListeners(realChanges) {
437
462
  }
438
463
  }
439
464
  }
440
- const namespaceLength = `${namespace()}${_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER}`.length;
441
- const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k) => k.slice(namespaceLength));
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));
442
467
  for (const cb of LISTENERS[namespace()]) {
443
- const fn = cb.bind(null, readableKeys, (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace()));
444
- 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)) {
445
470
  await fn();
446
471
  }
447
472
  else {
@@ -451,25 +476,25 @@ async function runStateChangeListeners(realChanges) {
451
476
  }
452
477
  }
453
478
  function addStateListener(namespace, observables, cb) {
454
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
479
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
455
480
  LISTENERS[namespace()].push(observables);
456
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
481
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
457
482
  }
458
- observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners?.push(cb));
459
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
483
+ observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners?.push(cb));
484
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
460
485
  }
461
486
  function removeStateListener(namespace, observables, removeCb) {
462
- if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
487
+ if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
463
488
  const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
464
489
  LISTENERS[namespace()].splice(removeIdx, 1);
465
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
490
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
466
491
  }
467
492
  observables.forEach((key) => {
468
- const listeners = ___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(key)].listeners;
493
+ const listeners = ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners;
469
494
  const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
470
495
  listeners?.splice(removeIdx, 1);
471
496
  });
472
- return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
497
+ return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
473
498
  }
474
499
 
475
500
 
@@ -481,10 +506,14 @@ function removeStateListener(namespace, observables, removeCb) {
481
506
  \************************/
482
507
  (__unused_webpack_module, __webpack_exports__, __webpack_require__) {
483
508
 
509
+ "use strict";
484
510
  __webpack_require__.r(__webpack_exports__);
485
511
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
486
512
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
487
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
+
488
517
  async function updateFromLocalStorage(state) {
489
518
  const stored = {};
490
519
  for (const key in state) {
@@ -556,6 +585,18 @@ function removeStorageKey(type, key) {
556
585
  /******/ }
557
586
  /******/
558
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
+ /******/
559
600
  /******/ /* webpack/runtime/define property getters */
560
601
  /******/ (() => {
561
602
  /******/ // define getter/value functions for harmony exports
@@ -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,()=>(()=>{"use strict";var e={"./src/actions.ts"(e,t,n){n.r(t),n.d(t,{addStateActions:()=>s});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:[]}}},"./src/constants.ts"(e,t,n){n.r(t),n.d(t,{NAMESPACE_DELIMITER:()=>r});const r="::"},"./src/helpers.ts"(e,t,n){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){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});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 await j(e,h(e,t)),V(e())}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:async e=>await 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){n.r(t),n.d(t,{LISTENERS:()=>o,addStateListener:()=>a,removeStateListener:()=>u,runStateChangeListeners:()=>i});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){n.r(t),n.d(t,{default:()=>r});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.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})());
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.65",
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,3 +1,5 @@
1
+ import { type INamespace, type IStateActions } from "./types";
2
+
1
3
  import { STATE, createStore } from ".";
2
4
 
3
5
  export function addStateActions(namespace: INamespace, actions: IStateActions) {
@@ -10,4 +12,6 @@ export function addStateActions(namespace: INamespace, actions: IStateActions) {
10
12
  listeners: [],
11
13
  };
12
14
  }
15
+
16
+ return createStore(namespace());
13
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 (obj: unknown) {
16
+ export function isAsyncFunction(obj: unknown) {
17
17
  return getObjectType(obj) === "[object AsyncFunction]";
18
18
  }
19
19
 
package/src/index.ts CHANGED
@@ -1,3 +1,18 @@
1
+ import {
2
+ type IVarstor,
3
+ type IState,
4
+ type IStateUpdatePieces,
5
+ type IStatePendingChanges,
6
+ type IStorageFunctions,
7
+ type INamespace,
8
+ type IStateDefault,
9
+ type IComputeFunction,
10
+ type IValue,
11
+ type IStateChanges,
12
+ type IStateActions,
13
+ type IStateListener,
14
+ } from "./types.d";
15
+
1
16
  import storageUtils from "./storage";
2
17
 
3
18
  import {
@@ -224,13 +239,13 @@ export function getState(namespace: INamespace, arg: string) {
224
239
  return createStore(arg);
225
240
  }
226
241
 
227
- return recreateStructure(getValues(namespace));
242
+ return recreateStructure(getValues(namespace)) as Record<string, any>;
228
243
  }
229
244
 
230
245
  export async function setState(
231
246
  namespace: INamespace,
232
247
  changes: Record<string, unknown>,
233
- ): Promise<unknown> {
248
+ ): Promise<IVarstor> {
234
249
  const storageChanges: Record<string, any> = {};
235
250
  const updateId = uid();
236
251
  const storageTypes = {} as Record<string, boolean>;
@@ -282,9 +297,7 @@ async function setValues(
282
297
  }
283
298
 
284
299
  export async function resetState(namespace: INamespace, keys?: string[]) {
285
- await setState(namespace, getDefaultValues(namespace, keys));
286
-
287
- return createStore(namespace());
300
+ return setState(namespace, getDefaultValues(namespace, keys));
288
301
  }
289
302
 
290
303
  function getDefaultValues(namespace: INamespace, keys?: string[]) {
@@ -303,7 +316,7 @@ export function createPendingChanges(namespace: INamespace) {
303
316
  const changes = STATE_PENDING_CHANGES[namespace()];
304
317
  STATE_PENDING_CHANGES[namespace()] = {};
305
318
  return changes;
306
- }
319
+ };
307
320
 
308
321
  return {
309
322
  add: (changes: Record<string, any>) =>
@@ -319,12 +332,16 @@ export function createPendingChanges(namespace: INamespace) {
319
332
  };
320
333
  }
321
334
 
322
- function main(namespace: INamespace): any {
335
+ function main(namespace?: INamespace): any {
323
336
  if (!arguments[1] || isString(arguments[1])) {
324
337
  return getState.apply(null, arguments as unknown as [INamespace, string]);
325
338
  }
326
339
 
327
- if (isArray(arguments[1]) || isFunction(arguments[1]) || isAsyncFunction(arguments[1])) {
340
+ if (
341
+ isArray(arguments[1]) ||
342
+ isFunction(arguments[1]) ||
343
+ isAsyncFunction(arguments[1])
344
+ ) {
328
345
  return addStateListener.apply(
329
346
  null,
330
347
  arguments as unknown as [INamespace, string[], () => {}],
@@ -347,7 +364,7 @@ function addNamespace(namespace: string, str: string) {
347
364
  return `${namespace}${(isString(str) && NAMESPACE_DELIMITER) || ""}${str || ""}`;
348
365
  }
349
366
 
350
- export function createStore(_namespace: string) {
367
+ export function createStore(_namespace: string): IVarstor {
351
368
  const namespace = ((key: string) =>
352
369
  addNamespace(_namespace, key)) as INamespace;
353
370
 
@@ -362,15 +379,14 @@ export function createStore(_namespace: string) {
362
379
  return Object.assign(main.bind(null, namespace), {
363
380
  add: (state: IStateDefault) => addState(namespace, state, false),
364
381
  addPersistent: (state: IStateDefault) => addState(namespace, state, true),
365
- get: (newNamespace: string) => getState(namespace, newNamespace),
366
- set: async (changes: Record<string, unknown>) =>
367
- await setState(namespace, changes),
382
+ get: (newNamespace?: string) => getState(namespace, newNamespace!),
383
+ set: (changes: Record<string, unknown>) => setState(namespace, changes),
368
384
  reset: (keys: string[]) => resetState(namespace, keys),
369
385
  changes: createPendingChanges(namespace),
370
- onChange: (keys: string[], cb: () => {}) =>
371
- addStateListener(namespace, keys, cb),
372
- removeListener: (keys: string[], cb: () => {}) =>
373
- removeStateListener(namespace, keys, cb),
386
+ onChange: (keys: string[] | IStateListener, cb?: IStateListener) =>
387
+ addStateListener(namespace, keys, cb!),
388
+ removeListener: (keys: string[] | IStateListener, cb?: IStateListener) =>
389
+ removeStateListener(namespace, keys, cb!),
374
390
  actions: (actions: IStateActions) => addStateActions(namespace, actions),
375
391
  setStorageUtils,
376
392
  joinStateChanges,
package/src/listeners.ts CHANGED
@@ -1,3 +1,11 @@
1
+ import {
2
+ type INamespace,
3
+ type IStateListeners,
4
+ type IStateChanges,
5
+ type IStateListener,
6
+ type IValue,
7
+ } from "./types";
8
+
1
9
  import { STATE, createStore } from ".";
2
10
  import { NAMESPACE_DELIMITER } from "./constants";
3
11
  import { map, isFunction, isAsyncFunction } from "./helpers";
@@ -6,12 +14,13 @@ export const LISTENERS = {} as IStateListeners;
6
14
 
7
15
  export async function runStateChangeListeners(realChanges: IStateChanges) {
8
16
  if (Object.keys(realChanges).length) {
9
- const { namespace } =
10
- STATE[Object.keys(realChanges)[0] as keyof typeof STATE];
17
+ const { namespace } = STATE[
18
+ Object.keys(realChanges)[0] as keyof typeof STATE
19
+ ] as IValue;
11
20
  for (const [changeKey] of Object.entries(realChanges)) {
12
21
  const { listeners, key } = STATE[changeKey];
13
22
  for (const cb of listeners!) {
14
- const fn = cb.bind(null, [key], createStore(namespace()));
23
+ const fn = cb.bind(null, [key!], createStore(namespace()));
15
24
  if (isAsyncFunction(cb)) {
16
25
  await fn();
17
26
  } else {
@@ -26,11 +35,7 @@ export async function runStateChangeListeners(realChanges: IStateChanges) {
26
35
  ) as string[];
27
36
 
28
37
  for (const cb of LISTENERS[namespace()]) {
29
- const fn = cb.bind(
30
- null,
31
- readableKeys,
32
- createStore(namespace())
33
- );
38
+ const fn = cb.bind(null, readableKeys, createStore(namespace()));
34
39
  if (isAsyncFunction(cb)) {
35
40
  await fn();
36
41
  } else {
@@ -43,7 +48,7 @@ export async function runStateChangeListeners(realChanges: IStateChanges) {
43
48
  export function addStateListener(
44
49
  namespace: INamespace,
45
50
  observables: string[] | IStateListener,
46
- cb: () => {},
51
+ cb: IStateListener,
47
52
  ) {
48
53
  if (isFunction(observables) || isAsyncFunction(observables)) {
49
54
  LISTENERS[namespace()].push(observables as IStateListener);
@@ -60,7 +65,7 @@ export function addStateListener(
60
65
  export function removeStateListener(
61
66
  namespace: INamespace,
62
67
  observables: string[] | IStateListener,
63
- removeCb: () => {},
68
+ removeCb: IStateListener,
64
69
  ) {
65
70
  if (isFunction(observables) || isAsyncFunction(observables)) {
66
71
  const removeIdx = LISTENERS[namespace()].findIndex(
@@ -72,8 +77,8 @@ export function removeStateListener(
72
77
 
73
78
  (observables as string[]).forEach((key) => {
74
79
  const listeners = STATE[namespace(key)].listeners;
75
- const removeIdx = listeners?.findIndex((cb) => cb === removeCb) as number;
76
- listeners?.splice(removeIdx, 1);
80
+ const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
81
+ listeners?.splice(removeIdx!, 1);
77
82
  });
78
83
 
79
84
  return createStore(namespace());
package/src/storage.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { type IStateDefault } from "./types";
2
+
1
3
  async function updateFromLocalStorage(state: IStateDefault) {
2
4
  const stored = {} as IStateDefault;
3
5
  for (const key in state) {
@@ -29,7 +31,7 @@ async function setStorageValue(
29
31
  return false;
30
32
  }
31
33
 
32
- function removeStorageKey (type: string, key: string) {
34
+ function removeStorageKey(type: string, key: string) {
33
35
  if (type) {
34
36
  localStorage.removeItem(key);
35
37
  }
package/src/types.d.ts CHANGED
@@ -11,7 +11,7 @@ type IValue = {
11
11
  dependencies?: string[];
12
12
  dependants?: string[];
13
13
  storageType?: string;
14
- listeners?: any[];
14
+ listeners?: IStateListener[];
15
15
  defaultValue?: any;
16
16
  namespace: INamespace;
17
17
  };
@@ -32,10 +32,7 @@ type IStorageFunctions = {
32
32
  REMOVE_KEY: (type: string, key: string) => void;
33
33
  };
34
34
 
35
- type IStateListener = (
36
- changes: string[],
37
- store: Record<string, any>,
38
- ) => any;
35
+ type IStateListener = (changes: string[], store: IStore) => void;
39
36
 
40
37
  type IStateListeners = Record<string, IStateListener[]>;
41
38
 
@@ -43,10 +40,39 @@ type IStateAction = (mutator: IStateMutator, args: any[]) => void;
43
40
 
44
41
  type IStateActions = Record<string, IStateAction>;
45
42
 
46
- type IStateUpdatePieces = Record<string, {
47
- storageTypes: Record<string, boolean>;
48
- readyStorageTypes: Record<string, boolean>;
49
- changes: IStateChanges;
50
- }>;
43
+ type IStateUpdatePieces = Record<
44
+ string,
45
+ {
46
+ storageTypes: Record<string, boolean>;
47
+ readyStorageTypes: Record<string, boolean>;
48
+ changes: IStateChanges;
49
+ }
50
+ >;
51
51
 
52
- type IStatePendingChanges = Record<string, Record<string, any>>;
52
+ type IStatePendingChanges = Record<string, Record<string, any>>;
53
+
54
+ type IStatePendingChangesFunctions = {
55
+ add: (changes: Record<string, any>) => Record<string, any>;
56
+ reset: (keys: string[]) => Record<string, any>;
57
+ get: () => Record<string, any>;
58
+ flush: () => Record<string, any>;
59
+ commit: () => Promise<unknown>;
60
+ };
61
+
62
+ export type IVarstor = ((namespace?: INamespace) => any) & {
63
+ add: (state: IStateDefault) => Promise<IVarstor>;
64
+ addPersistent: (state: IStateDefault) => Promise<IVarstor>;
65
+ get: (newNamespace?: string) => IVarstor | Record<string, any>;
66
+ set: (changes: Record<string, unknown>) => Promise<IVarstor>;
67
+ reset: (keys: string[]) => Promise<IVarstor>;
68
+ changes: IStatePendingChangesFunctions;
69
+ onChange: (keys: string[] | IStateListener, cb?: IStateListener) => IVarstor;
70
+ removeListener: (
71
+ keys: string[] | IStateListener,
72
+ cb?: IStateListener,
73
+ ) => IVarstor;
74
+ actions: (actions: IStateActions) => IVarstor;
75
+ setStorageUtils: (storageUtils: IStorageFunctions) => void;
76
+ joinStateChanges: (changesPiece: IStateChanges) => Promise<unknown>;
77
+ namespace: INamespace;
78
+ };
@@ -1,5 +1,7 @@
1
1
  const browser = require("webextension-polyfill/dist/browser-polyfill.min");
2
2
 
3
+ import { type IStateDefault } from "./types";
4
+
3
5
  export default {
4
6
  GET_TYPE: getStorageType,
5
7
  IS_AVAILABE: isStorageAvailable,
package/webpack.config.js CHANGED
@@ -25,13 +25,17 @@ module.exports = (env) => {
25
25
  {
26
26
  test: /\.(ts|tsx)$/i,
27
27
  loader: "ts-loader",
28
- exclude: ["/node_modules/"],
28
+ exclude: /node_modules|\.d\.ts$/,
29
+ },
30
+ {
31
+ test: /\.d\.ts$/,
32
+ loader: "ignore-loader",
29
33
  },
30
34
  ],
31
35
  },
32
36
 
33
37
  resolve: {
34
- extensions: [".ts", ".js"],
38
+ extensions: [".ts", ".js", ".d.ts"],
35
39
  },
36
40
 
37
41
  devtool: false,