varstor 0.6.62 → 0.6.64
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 +60 -11
- package/dist/varstor-webextension.js +121 -59
- package/dist/varstor-webextension.min.js +1 -1
- package/dist/varstor.js +111 -55
- package/dist/varstor.min.js +1 -1
- package/package.json +1 -1
- package/src/actions.ts +19 -0
- package/src/helpers.ts +8 -0
- package/src/index.ts +57 -16
- package/src/listeners.ts +19 -7
- package/src/storage.ts +7 -0
- package/src/types.d.ts +16 -4
- package/src/webextension-storage.ts +7 -0
- package/src/webextension.ts +3 -3
- package/src/validation.ts +0 -31
package/README.md
CHANGED
|
@@ -25,8 +25,9 @@ in your script file.
|
|
|
25
25
|
[1.3 Accessing ```.get()```](#accessing)
|
|
26
26
|
[1.4 Mutating ```.set()```/```.reset()```](#mutating)
|
|
27
27
|
[1.5 Listening ```.onChange()```/```.removeListener()```](#listening)
|
|
28
|
-
[1.6
|
|
29
|
-
[1.7
|
|
28
|
+
[1.6 Data encapsulation ```.actions()```](#actions)
|
|
29
|
+
[1.7 Namespacing ```.get(Namespace)```](#namespacing)
|
|
30
|
+
[1.8 Method chaining](#chaining)
|
|
30
31
|
2. [Shortcuts](#shortcuts)
|
|
31
32
|
3. [Example](#example)
|
|
32
33
|
|
|
@@ -40,10 +41,11 @@ The library object features the following methods:
|
|
|
40
41
|
.reset ()
|
|
41
42
|
.onChange ()
|
|
42
43
|
.removeListener ()
|
|
44
|
+
.actions ()
|
|
43
45
|
```
|
|
44
46
|
|
|
45
47
|
## Creation ```.add()```/```.addPersistent()``` <a name="creation"></a>
|
|
46
|
-
Values are added to the store with add or addPersistent methods. They perform the same functionality, except addPersistent saves state to the storage and lets you reuse it between browser sessions.
|
|
48
|
+
Values are added to the store with ```add``` or ```addPersistent``` methods. They perform the same functionality, except ```addPersistent``` saves state to the storage and lets you reuse it between browser sessions.
|
|
47
49
|
|
|
48
50
|
```js
|
|
49
51
|
async Varstor.add(
|
|
@@ -59,7 +61,10 @@ Where:
|
|
|
59
61
|
```KeysValues {}``` - a standard object with keys and values, where ```key``` is a name of piece of state, and ```value``` is a default value or ```ReactiveFunction```
|
|
60
62
|
```ReactiveFunction``` - re-evalutes and updates its value automatically each time arguments in ```valueNames``` list change. ```valueNames``` are any state values defined before the ```ReactiveFunction```. ```computedValue```s are not saved in storage.
|
|
61
63
|
|
|
62
|
-
|
|
64
|
+
> [!WARNING]
|
|
65
|
+
> ```add``` and ```addPersistent``` are asynchronous operations; you must `await` or use ```Promise.then``` to ensure all the data is ready to work with!
|
|
66
|
+
|
|
67
|
+
|
|
63
68
|
|
|
64
69
|
## Dynamic reevaluation (```ReactiveFunction```) <a name="reactivefunction"></a>
|
|
65
70
|
Values can change automatically with the help of ```ReactiveFunction```s when one or more of the other values in the namespace change.
|
|
@@ -97,7 +102,6 @@ async Varstor.set(
|
|
|
97
102
|
}
|
|
98
103
|
) => Varstor
|
|
99
104
|
```
|
|
100
|
-
**Important: values are updated asynchronously; don't assume the script will recognize the change immediately on the next line. Instead, ```await``` or make use of ```onChange``` listeners!**
|
|
101
105
|
|
|
102
106
|
To reset values back to defaults:
|
|
103
107
|
```js
|
|
@@ -106,6 +110,9 @@ async Varstor.reset(Keys []) => Varstor
|
|
|
106
110
|
Where:
|
|
107
111
|
```Keys[]``` (optional) - array of keys to return to default values. If omitted all values will be returned to defaults.
|
|
108
112
|
|
|
113
|
+
> [!WARNING]
|
|
114
|
+
> Values are mutated asynchronously; don't assume the script will recognize the change immediately on the next line. Instead, ```await``` or make use of ```onChange``` listeners!
|
|
115
|
+
|
|
109
116
|
|
|
110
117
|
## Listening ```.onChange()```/```.removeListener()``` <a name="listening"></a>
|
|
111
118
|
|
|
@@ -128,6 +135,31 @@ Varstor.removeListener(
|
|
|
128
135
|
) => Varstor
|
|
129
136
|
```
|
|
130
137
|
the same parameter usage.
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
## Data encapsulation ```.actions()``` <a name="actions"></a>
|
|
142
|
+
Hide away all public data access and mutation into dedicated functions with the help of ```StateAction```s.
|
|
143
|
+
```js
|
|
144
|
+
Varstor.actions({
|
|
145
|
+
KeysActions {
|
|
146
|
+
key1: StateAction1 (Varstor, ...arguments[]) => void
|
|
147
|
+
key2: StateAction2 (Varstor, ...arguments[]) => void
|
|
148
|
+
...
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
```
|
|
152
|
+
```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.
|
|
153
|
+
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.
|
|
154
|
+
```js
|
|
155
|
+
Varstor.add({ x: 1 });
|
|
156
|
+
|
|
157
|
+
Varstor.actions({
|
|
158
|
+
changeX: (varstor, newX) => varstor.set({ x: newX }),
|
|
159
|
+
}),
|
|
160
|
+
|
|
161
|
+
Varstor.get().changeX(10);
|
|
162
|
+
```
|
|
131
163
|
|
|
132
164
|
## Namespacing ```.get(Namespace)``` <a name="namespacing"></a>
|
|
133
165
|
To avoid name collisions, put keys with the same name in different namespaces. You can create a new or get an existing namespace with
|
|
@@ -156,7 +188,7 @@ function onChange(changes, values, data) {
|
|
|
156
188
|
console.log("onChange", changes, values, data);
|
|
157
189
|
}
|
|
158
190
|
|
|
159
|
-
Varstor.add({
|
|
191
|
+
await Varstor.add({
|
|
160
192
|
a: 10,
|
|
161
193
|
b: 20,
|
|
162
194
|
c: (a, b) => a + b,
|
|
@@ -185,12 +217,29 @@ Varstor.removeListener(onChange);
|
|
|
185
217
|
|
|
186
218
|
const newNamespace = Varstor("new namespace");
|
|
187
219
|
|
|
188
|
-
newNamespace.add({
|
|
189
|
-
|
|
190
|
-
|
|
220
|
+
await newNamespace.add({
|
|
221
|
+
x: 1,
|
|
222
|
+
y: 2,
|
|
223
|
+
z: 3,
|
|
191
224
|
});
|
|
192
225
|
|
|
193
|
-
newNamespace({
|
|
226
|
+
newNamespace.actions({
|
|
227
|
+
logValues: ({ get }) => {
|
|
228
|
+
const { x, y, z } = get();
|
|
229
|
+
console.log(`x: ${x}, y: ${y}, z: ${z}`);
|
|
230
|
+
},
|
|
231
|
+
multiplyX: ({ get, set }, num) => set({ x: get().x * num }),
|
|
232
|
+
incrementY: ({ get, set }) => set({ y: get().y + 1 }),
|
|
233
|
+
})
|
|
234
|
+
|
|
235
|
+
const { logValues, multiplyX, incrementY } = newNamespace.get();
|
|
236
|
+
|
|
237
|
+
logValues(); // x: 1, y: 2, z: 3
|
|
238
|
+
multiplyX(10)
|
|
239
|
+
incrementY();
|
|
240
|
+
logValues(); // x: 10, y: 3, z: 3
|
|
241
|
+
|
|
242
|
+
await newNamespace({ z: 110 });
|
|
194
243
|
|
|
195
|
-
console.log(Varstor("new namespace").get()); // {
|
|
244
|
+
console.log(Varstor("new namespace").get()); // {x: 10, y: 3, z: 110, logValues: ƒ, multiplyX: ƒ, …}
|
|
196
245
|
```
|
|
@@ -11,6 +11,39 @@
|
|
|
11
11
|
return /******/ (() => { // webpackBootstrap
|
|
12
12
|
/******/ var __webpack_modules__ = ({
|
|
13
13
|
|
|
14
|
+
/***/ "./src/actions.ts"
|
|
15
|
+
/*!************************!*\
|
|
16
|
+
!*** ./src/actions.ts ***!
|
|
17
|
+
\************************/
|
|
18
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
19
|
+
|
|
20
|
+
"use strict";
|
|
21
|
+
__webpack_require__.r(__webpack_exports__);
|
|
22
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
23
|
+
/* harmony export */ addStateActions: () => (/* binding */ addStateActions)
|
|
24
|
+
/* harmony export */ });
|
|
25
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
26
|
+
|
|
27
|
+
function addStateActions(namespace, actions) {
|
|
28
|
+
const stateAcessor = {
|
|
29
|
+
get: ___WEBPACK_IMPORTED_MODULE_0__.getState.bind(null, namespace),
|
|
30
|
+
set: ___WEBPACK_IMPORTED_MODULE_0__.setState.bind(null, namespace),
|
|
31
|
+
reset: ___WEBPACK_IMPORTED_MODULE_0__.resetState.bind(null, namespace),
|
|
32
|
+
};
|
|
33
|
+
for (let [actionName, actionFn] of Object.entries(actions)) {
|
|
34
|
+
___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(actionName)] = {
|
|
35
|
+
key: actionName,
|
|
36
|
+
namespace,
|
|
37
|
+
value: actionFn.bind(null, stateAcessor),
|
|
38
|
+
isAction: true,
|
|
39
|
+
listeners: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
/***/ },
|
|
46
|
+
|
|
14
47
|
/***/ "./src/constants.ts"
|
|
15
48
|
/*!**************************!*\
|
|
16
49
|
!*** ./src/constants.ts ***!
|
|
@@ -40,11 +73,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
40
73
|
/* harmony export */ forEach: () => (/* binding */ forEach),
|
|
41
74
|
/* harmony export */ getParamNames: () => (/* binding */ getParamNames),
|
|
42
75
|
/* harmony export */ isArray: () => (/* binding */ isArray),
|
|
76
|
+
/* harmony export */ isAsyncFunction: () => (/* binding */ isAsyncFunction),
|
|
43
77
|
/* harmony export */ isFunction: () => (/* binding */ isFunction),
|
|
44
78
|
/* harmony export */ isObject: () => (/* binding */ isObject),
|
|
45
79
|
/* harmony export */ isString: () => (/* binding */ isString),
|
|
46
80
|
/* harmony export */ map: () => (/* binding */ map),
|
|
47
|
-
/* harmony export */ recreateStructure: () => (/* binding */ recreateStructure)
|
|
81
|
+
/* harmony export */ recreateStructure: () => (/* binding */ recreateStructure),
|
|
82
|
+
/* harmony export */ uid: () => (/* binding */ uid)
|
|
48
83
|
/* harmony export */ });
|
|
49
84
|
const STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm;
|
|
50
85
|
const ARGUMENT_NAMES = /([^\s,]+)/g;
|
|
@@ -57,6 +92,9 @@ function isString(obj) {
|
|
|
57
92
|
function isFunction(obj) {
|
|
58
93
|
return getObjectType(obj) === "[object Function]";
|
|
59
94
|
}
|
|
95
|
+
function isAsyncFunction(obj) {
|
|
96
|
+
return getObjectType(obj) === "[object AsyncFunction]";
|
|
97
|
+
}
|
|
60
98
|
function isObject(obj) {
|
|
61
99
|
return getObjectType(obj) === "[object Object]";
|
|
62
100
|
}
|
|
@@ -102,6 +140,9 @@ function recreateStructure(value) {
|
|
|
102
140
|
}
|
|
103
141
|
return newValue;
|
|
104
142
|
}
|
|
143
|
+
function uid() {
|
|
144
|
+
return Date.now().toString(36) + Math.random().toString(36).substr(2);
|
|
145
|
+
}
|
|
105
146
|
|
|
106
147
|
|
|
107
148
|
/***/ },
|
|
@@ -118,12 +159,17 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
118
159
|
/* harmony export */ STATE: () => (/* binding */ STATE),
|
|
119
160
|
/* harmony export */ createStore: () => (/* binding */ createStore),
|
|
120
161
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
121
|
-
/* harmony export */
|
|
162
|
+
/* harmony export */ getState: () => (/* binding */ getState),
|
|
163
|
+
/* harmony export */ getValues: () => (/* binding */ getValues),
|
|
164
|
+
/* harmony export */ joinStateChanges: () => (/* binding */ joinStateChanges),
|
|
165
|
+
/* harmony export */ resetState: () => (/* binding */ resetState),
|
|
166
|
+
/* harmony export */ setState: () => (/* binding */ setState),
|
|
167
|
+
/* harmony export */ setupValue: () => (/* binding */ setupValue)
|
|
122
168
|
/* harmony export */ });
|
|
123
169
|
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
|
|
124
170
|
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
125
|
-
/* harmony import */ var
|
|
126
|
-
/* harmony import */ var
|
|
171
|
+
/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
|
|
172
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
127
173
|
/* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
|
|
128
174
|
|
|
129
175
|
|
|
@@ -131,6 +177,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
131
177
|
|
|
132
178
|
|
|
133
179
|
const STATE = {};
|
|
180
|
+
const WAITING_CHANGES = {};
|
|
134
181
|
const STORAGE = {};
|
|
135
182
|
setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
|
136
183
|
async function addState(namespace, initialState, isPersistent) {
|
|
@@ -145,7 +192,6 @@ async function addState(namespace, initialState, isPersistent) {
|
|
|
145
192
|
}
|
|
146
193
|
for (const key in initialState) {
|
|
147
194
|
const fullKey = namespace(key);
|
|
148
|
-
_validation__WEBPACK_IMPORTED_MODULE_3__.isValid.Defining(fullKey);
|
|
149
195
|
STATE[fullKey] = setupValue(key, namespace, values[fullKey], defaultValues[key], storageType);
|
|
150
196
|
}
|
|
151
197
|
return createStore(namespace());
|
|
@@ -196,6 +242,26 @@ function getArguments(dependencies, namespace) {
|
|
|
196
242
|
const values = getValues(namespace);
|
|
197
243
|
return dependencies.map((name) => values[name]);
|
|
198
244
|
}
|
|
245
|
+
async function joinStateChanges(changesPiece) {
|
|
246
|
+
for (const [updateId, { storageTypes, readyStorageTypes, changes },] of Object.entries(WAITING_CHANGES)) {
|
|
247
|
+
if (changesPiece[updateId]) {
|
|
248
|
+
const storageType = changesPiece[updateId].newValue;
|
|
249
|
+
readyStorageTypes[storageType] = true;
|
|
250
|
+
delete changesPiece[updateId];
|
|
251
|
+
Object.assign(changes, changesPiece);
|
|
252
|
+
if (STORAGE.IS_AVAILABE(storageType)) {
|
|
253
|
+
STORAGE.REMOVE_KEY(storageType, updateId);
|
|
254
|
+
}
|
|
255
|
+
for (const key in storageTypes) {
|
|
256
|
+
if (!readyStorageTypes[key]) {
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
delete WAITING_CHANGES[updateId];
|
|
261
|
+
await onStateChange(changes);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
199
265
|
async function onStateChange(changes) {
|
|
200
266
|
const realChanges = {};
|
|
201
267
|
for (const key in changes) {
|
|
@@ -243,19 +309,27 @@ function getState(namespace, arg) {
|
|
|
243
309
|
}
|
|
244
310
|
async function setState(namespace, changes) {
|
|
245
311
|
const storageChanges = {};
|
|
312
|
+
const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.uid)();
|
|
313
|
+
const storageTypes = {};
|
|
246
314
|
(0,_helpers__WEBPACK_IMPORTED_MODULE_1__.forEach)(changes, (k, v) => {
|
|
247
315
|
const fullKey = namespace(k);
|
|
248
|
-
const { storageType, computeFn } = STATE[fullKey];
|
|
249
|
-
if (computeFn) {
|
|
316
|
+
const { storageType, computeFn, isAction } = STATE[fullKey];
|
|
317
|
+
if (computeFn || isAction) {
|
|
250
318
|
return;
|
|
251
319
|
}
|
|
252
320
|
if (!storageChanges[storageType]) {
|
|
253
321
|
storageChanges[storageType] = {};
|
|
254
322
|
}
|
|
323
|
+
storageTypes[storageType] = true;
|
|
255
324
|
storageChanges[storageType][fullKey] = v;
|
|
256
325
|
});
|
|
326
|
+
WAITING_CHANGES[updateId] = {
|
|
327
|
+
storageTypes,
|
|
328
|
+
readyStorageTypes: {},
|
|
329
|
+
changes: {},
|
|
330
|
+
};
|
|
257
331
|
for (let [storageType, changes] of Object.entries(storageChanges)) {
|
|
258
|
-
await setValues(storageType, changes);
|
|
332
|
+
await setValues(storageType, { ...changes, [updateId]: storageType });
|
|
259
333
|
}
|
|
260
334
|
return createStore(namespace());
|
|
261
335
|
}
|
|
@@ -266,7 +340,7 @@ async function setValues(storageType, changes) {
|
|
|
266
340
|
return;
|
|
267
341
|
}
|
|
268
342
|
}
|
|
269
|
-
|
|
343
|
+
joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.map)(changes, (k, newValue) => [k, { newValue }]));
|
|
270
344
|
}
|
|
271
345
|
async function resetState(namespace, keys) {
|
|
272
346
|
const namespaceState = getNamespaceState(namespace);
|
|
@@ -290,7 +364,7 @@ function setStorageUtils(storageUtils) {
|
|
|
290
364
|
Object.assign(STORAGE, storageUtils);
|
|
291
365
|
}
|
|
292
366
|
function addNamespace(namespace, str) {
|
|
293
|
-
return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(str) &&
|
|
367
|
+
return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_1__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_3__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
|
|
294
368
|
}
|
|
295
369
|
function createStore(_namespace) {
|
|
296
370
|
const namespace = ((key) => addNamespace(_namespace, key));
|
|
@@ -302,8 +376,10 @@ function createStore(_namespace) {
|
|
|
302
376
|
reset: (keys) => resetState(namespace, keys),
|
|
303
377
|
onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.addStateListener)(namespace, keys, cb),
|
|
304
378
|
removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_4__.removeStateListener)(namespace, keys, cb),
|
|
379
|
+
actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_2__.addStateActions)(namespace, actions),
|
|
305
380
|
setStorageUtils,
|
|
306
|
-
|
|
381
|
+
joinStateChanges,
|
|
382
|
+
namespace,
|
|
307
383
|
});
|
|
308
384
|
}
|
|
309
385
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (createStore(""));
|
|
@@ -339,20 +415,33 @@ async function runStateChangeListeners(realChanges) {
|
|
|
339
415
|
for (let [changeKey, change] of Object.entries(realChanges)) {
|
|
340
416
|
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
|
|
341
417
|
for (const cb of listeners) {
|
|
342
|
-
|
|
418
|
+
const fn = cb.bind(null, [key], stateValues, change);
|
|
419
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(cb)) {
|
|
420
|
+
await fn();
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
fn();
|
|
424
|
+
}
|
|
343
425
|
}
|
|
344
426
|
}
|
|
345
|
-
const
|
|
427
|
+
const namespaceLength = `${namespace()}${_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER}`.length;
|
|
428
|
+
const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k) => k.slice(namespaceLength));
|
|
346
429
|
for (const cb of LISTENERS[namespace()]) {
|
|
347
|
-
|
|
348
|
-
k.slice(
|
|
430
|
+
const fn = cb.bind(null, readableKeys, stateValues, (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(realChanges, (k, v) => [
|
|
431
|
+
k.slice(namespaceLength),
|
|
349
432
|
v,
|
|
350
433
|
]));
|
|
434
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(cb)) {
|
|
435
|
+
await fn();
|
|
436
|
+
}
|
|
437
|
+
else {
|
|
438
|
+
fn();
|
|
439
|
+
}
|
|
351
440
|
}
|
|
352
441
|
}
|
|
353
442
|
}
|
|
354
443
|
function addStateListener(namespace, observables, cb) {
|
|
355
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables)) {
|
|
444
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
|
|
356
445
|
LISTENERS[namespace()].push(observables);
|
|
357
446
|
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
358
447
|
}
|
|
@@ -360,7 +449,7 @@ function addStateListener(namespace, observables, cb) {
|
|
|
360
449
|
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
361
450
|
}
|
|
362
451
|
function removeStateListener(namespace, observables, removeCb) {
|
|
363
|
-
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables)) {
|
|
452
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isAsyncFunction)(observables)) {
|
|
364
453
|
const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
|
|
365
454
|
LISTENERS[namespace()].splice(removeIdx, 1);
|
|
366
455
|
return (0,___WEBPACK_IMPORTED_MODULE_0__.createStore)(namespace());
|
|
@@ -409,53 +498,20 @@ async function setStorageValue(storageType, changes) {
|
|
|
409
498
|
}
|
|
410
499
|
return false;
|
|
411
500
|
}
|
|
501
|
+
function removeStorageKey(type, key) {
|
|
502
|
+
if (type) {
|
|
503
|
+
localStorage.removeItem(key);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
412
506
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
|
413
507
|
GET_TYPE: getStorageType,
|
|
414
508
|
IS_AVAILABE: isStorageAvailable,
|
|
415
509
|
UPDATE_STATE: updateFromLocalStorage,
|
|
416
510
|
SET_VALUES: setStorageValue,
|
|
511
|
+
REMOVE_KEY: removeStorageKey,
|
|
417
512
|
});
|
|
418
513
|
|
|
419
514
|
|
|
420
|
-
/***/ },
|
|
421
|
-
|
|
422
|
-
/***/ "./src/validation.ts"
|
|
423
|
-
/*!***************************!*\
|
|
424
|
-
!*** ./src/validation.ts ***!
|
|
425
|
-
\***************************/
|
|
426
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
427
|
-
|
|
428
|
-
"use strict";
|
|
429
|
-
__webpack_require__.r(__webpack_exports__);
|
|
430
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
431
|
-
/* harmony export */ isValid: () => (/* binding */ isValid)
|
|
432
|
-
/* harmony export */ });
|
|
433
|
-
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
434
|
-
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
function splitFullKey(fullKey) {
|
|
438
|
-
const segments = fullKey.split(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER);
|
|
439
|
-
return [segments.slice(-1)[0], segments.join(_constants__WEBPACK_IMPORTED_MODULE_1__.NAMESPACE_DELIMITER)];
|
|
440
|
-
}
|
|
441
|
-
const isValid = {
|
|
442
|
-
Setting: (fullKey) => {
|
|
443
|
-
if (!___WEBPACK_IMPORTED_MODULE_0__.STATE[fullKey]) {
|
|
444
|
-
const [key, namespace] = splitFullKey(fullKey);
|
|
445
|
-
throw new Error(`Setting "${key}" key in "${namespace}" namespace. DOES NOT EXIST`);
|
|
446
|
-
}
|
|
447
|
-
return true;
|
|
448
|
-
},
|
|
449
|
-
Defining: (fullKey) => {
|
|
450
|
-
if (___WEBPACK_IMPORTED_MODULE_0__.STATE[fullKey]) {
|
|
451
|
-
const [key, namespace] = splitFullKey(fullKey);
|
|
452
|
-
throw new Error(`Redefining "${key}" key in "${namespace}" namespace. ALREADY DEFINED`);
|
|
453
|
-
}
|
|
454
|
-
return true;
|
|
455
|
-
},
|
|
456
|
-
};
|
|
457
|
-
|
|
458
|
-
|
|
459
515
|
/***/ },
|
|
460
516
|
|
|
461
517
|
/***/ "./src/webextension-storage.ts"
|
|
@@ -477,6 +533,7 @@ const browser = __webpack_require__(/*! webextension-polyfill/dist/browser-polyf
|
|
|
477
533
|
IS_AVAILABE: isStorageAvailable,
|
|
478
534
|
UPDATE_STATE: updateStateFromStorage,
|
|
479
535
|
SET_VALUES: setStorageValue,
|
|
536
|
+
REMOVE_KEY: removeStorageKey,
|
|
480
537
|
});
|
|
481
538
|
function getStorageType(isPersistent) {
|
|
482
539
|
return (isBackgroundScript() && isPersistent && "local") || "session";
|
|
@@ -492,6 +549,11 @@ async function setStorageValue(type, changes) {
|
|
|
492
549
|
await browser.storage[type].set(changes);
|
|
493
550
|
return true;
|
|
494
551
|
}
|
|
552
|
+
async function removeStorageKey(type, key) {
|
|
553
|
+
if (type) {
|
|
554
|
+
await browser.storage[type].remove(key);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
495
557
|
function isSessionStorageSupport() {
|
|
496
558
|
return !!browser.storage.session;
|
|
497
559
|
}
|
|
@@ -618,11 +680,11 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
618
680
|
const browser = __webpack_require__(/*! webextension-polyfill/dist/browser-polyfill.min */ "./node_modules/webextension-polyfill/dist/browser-polyfill.min.js");
|
|
619
681
|
|
|
620
682
|
|
|
621
|
-
const {
|
|
683
|
+
const { joinStateChanges, setStorageUtils } = ___WEBPACK_IMPORTED_MODULE_0__["default"];
|
|
622
684
|
if ((0,_webextension_storage__WEBPACK_IMPORTED_MODULE_1__.isBackgroundScript)()) {
|
|
623
|
-
browser.storage.local.onChanged.addListener(
|
|
685
|
+
browser.storage.local.onChanged.addListener(joinStateChanges);
|
|
624
686
|
(0,_webextension_storage__WEBPACK_IMPORTED_MODULE_1__.isSessionStorageSupport)() &&
|
|
625
|
-
browser.storage.session.onChanged.addListener(
|
|
687
|
+
browser.storage.session.onChanged.addListener(joinStateChanges);
|
|
626
688
|
}
|
|
627
689
|
setStorageUtils(_webextension_storage__WEBPACK_IMPORTED_MODULE_1__["default"]);
|
|
628
690
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___WEBPACK_IMPORTED_MODULE_0__["default"]);
|
|
@@ -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/constants.ts"(e,r,s){"use strict";s.r(r),s.d(r,{NAMESPACE_DELIMITER:()=>n});const n="::"},"./src/helpers.ts"(e,r,s){"use strict";s.r(r),s.d(r,{filter:()=>u,forEach:()=>A,getParamNames:()=>l,isArray:()=>a,isFunction:()=>o,isObject:()=>g,isString:()=>i,map:()=>c,recreateStructure:()=>d});const n=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,t=/([^\s,]+)/g;function a(e){return"[object Array]"===m(e)}function i(e){return"[object String]"===m(e)}function o(e){return"[object Function]"===m(e)}function g(e){return"[object Object]"===m(e)}function m(e){return Object.prototype.toString.call(e)}function l(e){const r=e.toString().replace(n,"").split("=>")[0],s=r.slice(r.indexOf("(")+1,r.indexOf(")")).match(t);return null===s?[]:s}function c(e,r){const s=Object.entries(e).map(([e,s])=>r(e,s));return 2===s[0]?.length?Object.fromEntries(s):s}function A(e,r){Object.entries(e||{}).forEach(([e,s])=>r(e,s))}function u(e,r){return Object.fromEntries(Object.entries(e||{}).filter(([e,s])=>!0===r(e,s)))}function d(e){let r=e;if(a(e))return r=[],e.forEach(e=>r.push(d(e))),r;if(g(e)){r={};for(let s in e)r[s]=d(e[s]);return r}return r}},"./src/index.ts"(e,r,s){"use strict";s.r(r),s.d(r,{STATE:()=>g,createStore:()=>S,default:()=>w,getValues:()=>u});var n=s("./src/storage.ts"),t=s("./src/helpers.ts"),a=s("./src/constants.ts"),i=s("./src/validation.ts"),o=s("./src/listeners.ts");const g={},m={};async function l(e,r,s){const n=m.GET_TYPE(s),a=Object.assign({},r),l=(0,t.map)(r,(r,s)=>[e(r),s]);m.IS_AVAILABE(n)&&await m.UPDATE_STATE(l,n),o.LISTENERS[e()]||(o.LISTENERS[e()]=[]);for(const s in r){const r=e(s);i.isValid.Defining(r),g[r]=c(s,e,l[r],a[s],n)}return S(e())}function c(e,r,s,n,a){const i=r(e),o=(0,t.isFunction)(s),m=o?(0,t.getParamNames)(s):[];return m.forEach(e=>{const s=r(e);g[s]||(g[s]={dependants:[],dependencies:[],namespace:r,storageType:a}),g[s].dependants?.push(i)}),{key:e,fullKey:i,value:o?s.apply(null,d(m,r)):s,computeFn:o&&s,dependencies:m,dependants:[],listeners:[],defaultValue:n,storageType:a,namespace:r}}function A(e){return(0,t.filter)(g,(r,{key:s})=>r===e(s))}function u(e){return(0,t.map)(A(e),(e,{key:r,value:s})=>[r,s])}function d(e,r){const s=u(r);return e.map(e=>s[e])}async function x(e){const r={};for(const s in e){const n=g[s].value,t=e[s].newValue;n!==t?(r[s]={newValue:t,prevValue:n},g[s].value=t):r[s]={isSame:!0},f(s,e,r)}await(0,o.runStateChangeListeners)((0,t.filter)(r,(e,r)=>!r.isSame))}function f(e,r,s){g[e].dependants?.forEach(e=>{const{dependencies:n,namespace:t}=g[e];if(!function(e,r,s,n){return e.every(e=>{const t=r(e);return s.includes(t)&&n.includes(t)||!s.includes(t)})}(n,t,Object.keys(r),Object.keys(s))||s[e])return;const a=g[e].value,i=g[e].computeFn?.apply(null,d(n,t));a!==i&&(s[e]={newValue:i,prevValue:a},g[e].value=i,f(e,r,s))})}function p(e,r){return(0,t.isString)(r)?S(r):(0,t.recreateStructure)(u(e))}async function b(e,r){const s={};(0,t.forEach)(r,(r,n)=>{const t=e(r),{storageType:a,computeFn:i}=g[t];i||(s[a]||(s[a]={}),s[a][t]=n)});for(let[e,r]of Object.entries(s))await h(e,r);return S(e())}async function h(e,r){if(m.IS_AVAILABE(e)){if(await m.SET_VALUES(e,r))return}x((0,t.map)(r,(e,r)=>[e,{newValue:r}]))}function E(e){return!arguments[1]||(0,t.isString)(arguments[1])?p.apply(null,arguments):(0,t.isArray)(arguments[1])?o.addStateListener.apply(null,arguments):(0,t.isObject)(arguments[1])?b.apply(null,arguments):void 0}function y(e){Object.assign(m,e)}function S(e){const r=r=>function(e,r){return`${e}${(0,t.isString)(r)&&a.NAMESPACE_DELIMITER||""}${r||""}`}(e,r);return Object.assign(E.bind(null,r),{add:e=>l(r,e,!1),addPersistent:e=>l(r,e,!0),get:e=>p(r,e),set:async e=>await b(r,e),reset:e=>async function(e,r){const s=A(e);return await b(e,(0,t.map)(r?(0,t.filter)(s,(e,{key:s})=>r.includes(s)):s,(e,{key:r,defaultValue:s})=>[r,s])),S(e())}(r,e),onChange:(e,s)=>(0,o.addStateListener)(r,e,s),removeListener:(e,s)=>(0,o.removeStateListener)(r,e,s),setStorageUtils:y,onStateChange:x})}y(n.default);const w=S("")},"./src/listeners.ts"(e,r,s){"use strict";s.r(r),s.d(r,{LISTENERS:()=>i,addStateListener:()=>g,removeStateListener:()=>m,runStateChangeListeners:()=>o});var n=s("./src/index.ts"),t=s("./src/constants.ts"),a=s("./src/helpers.ts");const i={};async function o(e){if(Object.keys(e).length){const{namespace:r}=n.STATE[Object.keys(e)[0]],s=(0,n.getValues)(r);for(let[r,t]of Object.entries(e)){const{listeners:e,key:a}=n.STATE[r];for(const r of e)await r([a],s,t)}const o=(0,a.map)(e,e=>e.slice(t.NAMESPACE_DELIMITER.length));for(const n of i[r()])await n(o,s,(0,a.map)(e,(e,r)=>[e.slice(t.NAMESPACE_DELIMITER.length),r]))}}function g(e,r,s){return(0,a.isFunction)(r)?(i[e()].push(r),(0,n.createStore)(e())):(r.forEach(r=>n.STATE[e(r)].listeners?.push(s)),(0,n.createStore)(e()))}function m(e,r,s){if((0,a.isFunction)(r)){const s=i[e()].findIndex(e=>e===r);return i[e()].splice(s,1),(0,n.createStore)(e())}return r.forEach(r=>{const t=n.STATE[e(r)].listeners,a=t?.findIndex(e=>e===s);t?.splice(a,1)}),(0,n.createStore)(e())}},"./src/storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>n});const n={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}}},"./src/validation.ts"(e,r,s){"use strict";s.r(r),s.d(r,{isValid:()=>i});var n=s("./src/index.ts"),t=s("./src/constants.ts");function a(e){const r=e.split(t.NAMESPACE_DELIMITER);return[r.slice(-1)[0],r.join(t.NAMESPACE_DELIMITER)]}const i={Setting:e=>{if(!n.STATE[e]){const[r,s]=a(e);throw new Error(`Setting "${r}" key in "${s}" namespace. DOES NOT EXIST`)}return!0},Defining:e=>{if(n.STATE[e]){const[r,s]=a(e);throw new Error(`Redefining "${r}" key in "${s}" namespace. ALREADY DEFINED`)}return!0}}},"./src/webextension-storage.ts"(e,r,s){"use strict";s.r(r),s.d(r,{default:()=>t,isBackgroundScript:()=>i,isSessionStorageSupport:()=>a});const n=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),t={GET_TYPE:function(e){return i()&&e?"local":"session"},IS_AVAILABE:function(e){return"local"===e||"session"===e&&a()},UPDATE_STATE:async function(e,r){return Object.assign(e,await n.storage[r].get())},SET_VALUES:async function(e,r){return await n.storage[e].set(r),!0}};function a(){return!!n.storage.session}function i(){return"chrome-extension:"===window.location.protocol||"moz-extension:"===window.location.protocol}},"./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"(e,r){var s,n,t;"undefined"==typeof globalThis?"undefined"==typeof self||self:globalThis,n=[e],void 0===(t="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 n=e=>e&&"object"==typeof e&&"function"==typeof e.then,t=(r,s)=>(...n)=>{e.runtime.lastError?r.reject(new Error(e.runtime.lastError.message)):s.singleCallbackArg||1>=n.length&&!1!==s.singleCallbackArg?r.resolve(n[0]):r.resolve(n)},a=e=>1==e?"argument":"arguments",i=(e,r)=>function(s,...n){if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((a,i)=>{if(r.fallbackToNoCallback)try{s[e](...n,t({resolve:a,reject:i},r))}catch(t){console.warn(`${e} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,t),s[e](...n),r.fallbackToNoCallback=!1,r.noCallback=!0,a()}else r.noCallback?(s[e](...n),a()):s[e](...n,t({resolve:a,reject:i},r))})},o=(e,r,s)=>new Proxy(r,{apply:(r,n,t)=>s.call(n,e,...t)});let g=Function.call.bind(Object.prototype.hasOwnProperty);const m=(e,r={},s={})=>{let n=Object.create(null),t=Object.create(e);return new Proxy(t,{has:(r,s)=>s in e||s in n,get(t,a){if(a in n)return n[a];if(!(a in e))return;let l=e[a];if("function"==typeof l)if("function"==typeof r[a])l=o(e,e[a],r[a]);else if(g(s,a)){let r=i(a,s[a]);l=o(e,e[a],r)}else l=l.bind(e);else if("object"==typeof l&&null!==l&&(g(r,a)||g(s,a)))l=m(l,r[a],s[a]);else{if(!g(s,"*"))return Object.defineProperty(n,a,{configurable:!0,enumerable:!0,get:()=>e[a],set(r){e[a]=r}}),l;l=m(l,r[a],s["*"])}return n[a]=l,l},set:(r,s,t)=>(s in n?n[s]=t:e[s]=t,!0),defineProperty:(e,r,s)=>Reflect.defineProperty(n,r,s),deleteProperty:(e,r)=>Reflect.deleteProperty(n,r)})},l=e=>({addListener(r,s,...n){r.addListener(e.get(s),...n)},hasListener:(r,s)=>r.hasListener(e.get(s)),removeListener(r,s){r.removeListener(e.get(s))}}),c=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,t){let a,i,o=!1,g=new Promise(e=>{a=function(r){o=!0,e(r)}});try{i=e(r,s,a)}catch(e){i=Promise.reject(e)}const m=!0!==i&&n(i);if(!0!==i&&!m&&!o)return!1;const l=e=>{e.then(e=>{t(e)},e=>{let r;r=e&&(e instanceof Error||"string"==typeof e.message)?e.message:"An unexpected error occurred",t({__mozWebExtensionPolyfillReject__:!0,message:r})}).catch(e=>{console.error("Failed to send onMessage rejected reply",e)})};return l(m?i:g),!0}:e),u=({reject:r,resolve:s},n)=>{e.runtime.lastError?"The message port closed before a response was received."===e.runtime.lastError.message?s():r(new Error(e.runtime.lastError.message)):n&&n.__mozWebExtensionPolyfillReject__?r(new Error(n.message)):s(n)},d=(e,r,s,...n)=>{if(n.length<r.minArgs)throw new Error(`Expected at least ${r.minArgs} ${a(r.minArgs)} for ${e}(), got ${n.length}`);if(n.length>r.maxArgs)throw new Error(`Expected at most ${r.maxArgs} ${a(r.maxArgs)} for ${e}(), got ${n.length}`);return new Promise((e,r)=>{const t=u.bind(null,{resolve:e,reject:r});n.push(t),s.sendMessage(...n)})},x={devtools:{network:{onRequestFinished:l(c)}},runtime:{onMessage:l(A),onMessageExternal:l(A),sendMessage:d.bind(null,"sendMessage",{minArgs:1,maxArgs:3})},tabs:{sendMessage:d.bind(null,"sendMessage",{minArgs:2,maxArgs:3})}},f={clear:{minArgs:1,maxArgs:1},get:{minArgs:1,maxArgs:1},set:{minArgs:1,maxArgs:1}};return r.privacy={network:{"*":f},services:{"*":f},websites:{"*":f}},m(e,x,r)})(chrome)})?s.apply(r,n):s)||(e.exports=t)}};const r={};function s(n){const t=r[n];if(void 0!==t)return t.exports;const a=r[n]={exports:{}};if(!(n in e)){delete r[n];const e=new Error("Cannot find module '"+n+"'");throw e.code="MODULE_NOT_FOUND",e}return e[n].call(a.exports,a,a.exports,s),a.exports}s.d=(e,r)=>{if(Array.isArray(r))for(var n=0;n<r.length;){var t=r[n++],a=r[n++];s.o(e,t)?0===a&&n++:0===a?Object.defineProperty(e,t,{enumerable:!0,value:r[n++]}):Object.defineProperty(e,t,{enumerable:!0,get:a})}else for(var t in r)s.o(r,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},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 n={};return(()=>{"use strict";s.r(n),s.d(n,{default:()=>o});var e=s("./src/index.ts"),r=s("./src/webextension-storage.ts");const t=s("./node_modules/webextension-polyfill/dist/browser-polyfill.min.js"),{onStateChange:a,setStorageUtils:i}=e.default;(0,r.isBackgroundScript)()&&(t.storage.local.onChanged.addListener(a),(0,r.isSessionStorageSupport)()&&t.storage.session.onChanged.addListener(a)),i(r.default);const o=e.default})(),n=n.default,n})());
|
|
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){const s={get:t.getState.bind(null,e),set:t.setState.bind(null,e),reset:t.resetState.bind(null,e)};for(let[n,a]of Object.entries(r))t.STATE[e(n)]={key:n,namespace:e,value:a.bind(null,s),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,createStore:()=>v,default:()=>k,getState:()=>y,getValues:()=>d,joinStateChanges:()=>x,resetState:()=>E,setState:()=>h,setupValue:()=>A});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={};async function l(e,r,s){const t=c.GET_TYPE(s),a=Object.assign({},r),o=(0,n.map)(r,(r,s)=>[e(r),s]);c.IS_AVAILABE(t)&&await c.UPDATE_STATE(o,t),i.LISTENERS[e()]||(i.LISTENERS[e()]=[]);for(const s in r){const r=e(s);g[r]=A(s,e,o[r],a[s],t)}return v(e())}function A(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,f(m,r)):s,computeFn:i&&s,dependencies:m,dependants:[],listeners:[],defaultValue:t,storageType:a,namespace:r}}function u(e){return(0,n.filter)(g,(r,{key:s})=>r===e(s))}function d(e){return(0,n.map)(u(e),(e,{key:r,value:s})=>[r,s])}function f(e,r){const s=d(r);return e.map(e=>s[e])}async function x(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),c.IS_AVAILABE(a)&&c.REMOVE_KEY(a,r);for(const e in s)if(!t[e])return;delete m[r],await p(n)}}async function p(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},b(s,e,r)}await(0,i.runStateChangeListeners)((0,n.filter)(r,(e,r)=>!r.isSame))}function b(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,f(t,n));a!==o&&(s[e]={newValue:o,prevValue:a},g[e].value=o,b(e,r,s))})}function y(e,r){return(0,n.isString)(r)?v(r):(0,n.recreateStructure)(d(e))}async function h(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 S(e,{...r,[t]:e});return v(e())}async function S(e,r){if(c.IS_AVAILABE(e)){if(await c.SET_VALUES(e,r))return}x((0,n.map)(r,(e,r)=>[e,{newValue:r}]))}async function E(e,r){const s=u(e);return await h(e,(0,n.map)(r?(0,n.filter)(s,(e,{key:s})=>r.includes(s)):s,(e,{key:r,defaultValue:s})=>[r,s])),v(e())}function w(e){return!arguments[1]||(0,n.isString)(arguments[1])?y.apply(null,arguments):(0,n.isArray)(arguments[1])?i.addStateListener.apply(null,arguments):(0,n.isObject)(arguments[1])?h.apply(null,arguments):void 0}function T(e){Object.assign(c,e)}function v(e){const r=r=>function(e,r){return`${e}${(0,n.isString)(r)&&o.NAMESPACE_DELIMITER||""}${r||""}`}(e,r);return Object.assign(w.bind(null,r),{add:e=>l(r,e,!1),addPersistent:e=>l(r,e,!0),get:e=>y(r,e),set:async e=>await h(r,e),reset:e=>E(r,e),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:T,joinStateChanges:x,namespace:r})}T(t.default);const k=v("")},"./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]],s=(0,t.getValues)(r);for(let[r,n]of Object.entries(e)){const{listeners:e,key:o}=t.STATE[r];for(const r of e){const e=r.bind(null,[o],s,n);(0,a.isAsyncFunction)(r)?await e():e()}}const i=`${r()}${n.NAMESPACE_DELIMITER}`.length,g=(0,a.map)(e,e=>e.slice(i));for(const t of o[r()]){const r=t.bind(null,g,s,(0,a.map)(e,(e,r)=>[e.slice(i),r]));(0,a.isAsyncFunction)(t)?await r():r()}}}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})());
|