varstor 0.6.64 → 0.6.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +44 -12
- package/dist/varstor-webextension.js +123 -70
- package/dist/varstor-webextension.min.js +1 -1
- package/dist/varstor.js +126 -71
- package/dist/varstor.min.js +1 -1
- package/package.json +3 -1
- package/src/actions.ts +7 -9
- package/src/helpers.ts +1 -1
- package/src/index.ts +75 -30
- package/src/listeners.ts +19 -20
- package/src/storage.ts +3 -1
- package/src/types.d.ts +38 -11
- package/src/webextension-storage.ts +2 -0
- package/webpack.config.js +6 -2
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ in your script file.
|
|
|
23
23
|
[1.1 Creation ```.add()```/```.addPersistent()```](#creation)
|
|
24
24
|
[1.2 Dynamic reevaluation (```ReactiveFunction```)](#reactivefunction)
|
|
25
25
|
[1.3 Accessing ```.get()```](#accessing)
|
|
26
|
-
[1.4 Mutating ```.set()```/```.reset()```](#mutating)
|
|
26
|
+
[1.4 Mutating ```.set()```/```.reset()```/```.changes.*()```](#mutating)
|
|
27
27
|
[1.5 Listening ```.onChange()```/```.removeListener()```](#listening)
|
|
28
28
|
[1.6 Data encapsulation ```.actions()```](#actions)
|
|
29
29
|
[1.7 Namespacing ```.get(Namespace)```](#namespacing)
|
|
@@ -32,16 +32,18 @@ in your script file.
|
|
|
32
32
|
3. [Example](#example)
|
|
33
33
|
|
|
34
34
|
## Usage <a name="overview"></a>
|
|
35
|
-
The library object features the following methods:
|
|
35
|
+
The library object features the following methods and properties:
|
|
36
36
|
```js
|
|
37
37
|
.add ()
|
|
38
38
|
.addPersistent ()
|
|
39
39
|
.get ()
|
|
40
40
|
.set ()
|
|
41
41
|
.reset ()
|
|
42
|
+
.changes {}
|
|
42
43
|
.onChange ()
|
|
43
44
|
.removeListener ()
|
|
44
45
|
.actions ()
|
|
46
|
+
.namespace () // just returns the string value of the current namespace
|
|
45
47
|
```
|
|
46
48
|
|
|
47
49
|
## Creation ```.add()```/```.addPersistent()``` <a name="creation"></a>
|
|
@@ -92,7 +94,7 @@ Where:
|
|
|
92
94
|
|
|
93
95
|
|
|
94
96
|
|
|
95
|
-
## Mutating ```.set()```/```.reset()``` <a name="mutating"></a>
|
|
97
|
+
## Mutating ```.set()```/```.reset()```/```.changes.*()``` <a name="mutating"></a>
|
|
96
98
|
Values are mutated with:
|
|
97
99
|
```js
|
|
98
100
|
async Varstor.set(
|
|
@@ -102,13 +104,22 @@ async Varstor.set(
|
|
|
102
104
|
}
|
|
103
105
|
) => Varstor
|
|
104
106
|
```
|
|
105
|
-
|
|
107
|
+
\
|
|
106
108
|
To reset values back to defaults:
|
|
107
109
|
```js
|
|
108
110
|
async Varstor.reset(Keys []) => Varstor
|
|
109
111
|
```
|
|
110
112
|
Where:
|
|
111
113
|
```Keys[]``` (optional) - array of keys to return to default values. If omitted all values will be returned to defaults.
|
|
114
|
+
\
|
|
115
|
+
For more control over the timing of state changes in the namespace, use ```.changes {}``` methods collection.
|
|
116
|
+
```js
|
|
117
|
+
Varstor.changes.add(KeysValues {}) // => adds pending changes in the current namespace
|
|
118
|
+
Varstor.changes.reset(Keys []) // => adds pending changes that will reset some of the keys
|
|
119
|
+
Varstor.changes.get() // => gets pending changes in the current namespace
|
|
120
|
+
Varstor.changes.flush() // => returns and then empties the pending changes object
|
|
121
|
+
Varstor.changes.commit() // => actually commits all accumulated pending changes in the namespace
|
|
122
|
+
```
|
|
112
123
|
|
|
113
124
|
> [!WARNING]
|
|
114
125
|
> 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!
|
|
@@ -120,18 +131,21 @@ To listen and react to state changes:
|
|
|
120
131
|
```js
|
|
121
132
|
Varstor.onChange(
|
|
122
133
|
Keys[],
|
|
123
|
-
ChangeCallback(ChangedKeys [],
|
|
134
|
+
ChangeCallback(ChangedKeys [], Varstor) => void
|
|
124
135
|
) => Varstor
|
|
125
136
|
```
|
|
126
137
|
Where:
|
|
127
138
|
```Keys[]``` (optional) - array of keys of the state in the current namespace that you want to listen to. If omitted, ```ChangeCallback``` will run on any value change in the namespace.
|
|
128
|
-
|
|
139
|
+
|
|
129
140
|
|
|
141
|
+
```ChangeCallback``` - a function to run when the change happens. Takes ```ChangedKeys[]``` array of keys that have been changed as the first argument, and a ```Varstor``` instance as the second.
|
|
142
|
+
\
|
|
143
|
+
\
|
|
130
144
|
To remove the listener:
|
|
131
145
|
```js
|
|
132
146
|
Varstor.removeListener(
|
|
133
147
|
Keys[],
|
|
134
|
-
ChangeCallback(ChangedKeys [],
|
|
148
|
+
ChangeCallback(ChangedKeys [], Varstor) => void
|
|
135
149
|
) => Varstor
|
|
136
150
|
```
|
|
137
151
|
the same parameter usage.
|
|
@@ -147,7 +161,7 @@ Varstor.actions({
|
|
|
147
161
|
key2: StateAction2 (Varstor, ...arguments[]) => void
|
|
148
162
|
...
|
|
149
163
|
}
|
|
150
|
-
})
|
|
164
|
+
}) => Varstor
|
|
151
165
|
```
|
|
152
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.
|
|
153
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.
|
|
@@ -170,7 +184,7 @@ which will return a new instance of ```Varstor``` with the specified ```Namespac
|
|
|
170
184
|
|
|
171
185
|
|
|
172
186
|
## Method chaining <a name="chaining"></a>
|
|
173
|
-
Methods ```.add```, ```.addPersistent```, ```.set()```, ```.reset()```, ```onChange```, and
|
|
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.
|
|
174
188
|
|
|
175
189
|
|
|
176
190
|
## Shortcuts <a name="shortcuts"></a>
|
|
@@ -179,13 +193,14 @@ The library/namespace object itself can be called with different types of argume
|
|
|
179
193
|
Varstor() -> Varstor.get()
|
|
180
194
|
Varstor(String namespace) -> Varstor.get(namespace)
|
|
181
195
|
Varstor({ key: value }) -> Varstor.set({ key: value })
|
|
182
|
-
Varstor([], () => {}) -> Varstor.onChange([], () => {})
|
|
196
|
+
Varstor([], () => {}) -> Varstor.onChange([], () => {})
|
|
197
|
+
Varstor(() => {}) -> Varstor.onChange(() => {})
|
|
183
198
|
```
|
|
184
199
|
|
|
185
200
|
## Example <a name="example"></a>
|
|
186
201
|
```js
|
|
187
|
-
function onChange(changes,
|
|
188
|
-
console.log("onChange",
|
|
202
|
+
function onChange(changes, store) {
|
|
203
|
+
console.log("onChange", store.get());
|
|
189
204
|
}
|
|
190
205
|
|
|
191
206
|
await Varstor.add({
|
|
@@ -242,4 +257,21 @@ logValues(); // x: 10, y: 3, z: 3
|
|
|
242
257
|
await newNamespace({ z: 110 });
|
|
243
258
|
|
|
244
259
|
console.log(Varstor("new namespace").get()); // {x: 10, y: 3, z: 110, logValues: ƒ, multiplyX: ƒ, …}
|
|
260
|
+
|
|
261
|
+
const thirdNamespace = Varstor("third namespace");
|
|
262
|
+
|
|
263
|
+
thirdNamespace.add({
|
|
264
|
+
phrase: "Hello",
|
|
265
|
+
to: "world",
|
|
266
|
+
});
|
|
267
|
+
|
|
268
|
+
thirdNamespace.changes.add({ phrase: "Greetings" });
|
|
269
|
+
thirdNamespace.changes.add({ to: "you" });
|
|
270
|
+
|
|
271
|
+
console.log(thirdNamespace.get()) // {phrase: 'Hello', to: 'world'}
|
|
272
|
+
|
|
273
|
+
thirdNamespace.changes.commit();
|
|
274
|
+
|
|
275
|
+
console.log(thirdNamespace.get()) // {phrase: 'Greetings', to: 'you'}
|
|
276
|
+
|
|
245
277
|
```
|
|
@@ -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,23 +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
|
|
35
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
|
|
36
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
|
|
37
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
38
|
+
|
|
26
39
|
|
|
27
40
|
function addStateActions(namespace, actions) {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
set: ___WEBPACK_IMPORTED_MODULE_0__.setState.bind(null, namespace),
|
|
31
|
-
reset: ___WEBPACK_IMPORTED_MODULE_0__.resetState.bind(null, namespace),
|
|
32
|
-
};
|
|
33
|
-
for (let [actionName, actionFn] of Object.entries(actions)) {
|
|
34
|
-
___WEBPACK_IMPORTED_MODULE_0__.STATE[namespace(actionName)] = {
|
|
41
|
+
for (const [actionName, actionFn] of Object.entries(actions)) {
|
|
42
|
+
___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(actionName)] = {
|
|
35
43
|
key: actionName,
|
|
36
44
|
namespace,
|
|
37
|
-
value: actionFn.bind(null,
|
|
45
|
+
value: actionFn.bind(null, (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace())),
|
|
38
46
|
isAction: true,
|
|
39
47
|
listeners: [],
|
|
40
48
|
};
|
|
41
49
|
}
|
|
50
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
42
51
|
}
|
|
43
52
|
|
|
44
53
|
|
|
@@ -157,6 +166,7 @@ function uid() {
|
|
|
157
166
|
__webpack_require__.r(__webpack_exports__);
|
|
158
167
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
159
168
|
/* harmony export */ STATE: () => (/* binding */ STATE),
|
|
169
|
+
/* harmony export */ createPendingChanges: () => (/* binding */ createPendingChanges),
|
|
160
170
|
/* harmony export */ createStore: () => (/* binding */ createStore),
|
|
161
171
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
162
172
|
/* harmony export */ getState: () => (/* binding */ getState),
|
|
@@ -166,30 +176,31 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
166
176
|
/* harmony export */ setState: () => (/* binding */ setState),
|
|
167
177
|
/* harmony export */ setupValue: () => (/* binding */ setupValue)
|
|
168
178
|
/* harmony export */ });
|
|
169
|
-
/* harmony import */ var
|
|
170
|
-
/* harmony import */ var
|
|
171
|
-
/* harmony import */ var
|
|
172
|
-
/* harmony import */ var
|
|
173
|
-
/* harmony import */ var
|
|
179
|
+
/* harmony import */ var _types_d__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types.d */ "./src/types.d.ts");
|
|
180
|
+
/* harmony import */ var _types_d__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types_d__WEBPACK_IMPORTED_MODULE_0__);
|
|
181
|
+
/* harmony import */ var _storage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./storage */ "./src/storage.ts");
|
|
182
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
183
|
+
/* harmony import */ var _actions__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./actions */ "./src/actions.ts");
|
|
184
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
185
|
+
/* harmony import */ var _listeners__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./listeners */ "./src/listeners.ts");
|
|
186
|
+
|
|
174
187
|
|
|
175
188
|
|
|
176
189
|
|
|
177
190
|
|
|
178
191
|
|
|
179
192
|
const STATE = {};
|
|
180
|
-
const
|
|
193
|
+
const STATE_CHANGED_PIECES = {};
|
|
194
|
+
const STATE_PENDING_CHANGES = {};
|
|
181
195
|
const STORAGE = {};
|
|
182
|
-
setStorageUtils(
|
|
196
|
+
setStorageUtils(_storage__WEBPACK_IMPORTED_MODULE_1__["default"]);
|
|
183
197
|
async function addState(namespace, initialState, isPersistent) {
|
|
184
198
|
const storageType = STORAGE.GET_TYPE(isPersistent);
|
|
185
199
|
const defaultValues = Object.assign({}, initialState);
|
|
186
|
-
const values = (0,
|
|
200
|
+
const values = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(initialState, (k, v) => [namespace(k), v]);
|
|
187
201
|
if (STORAGE.IS_AVAILABE(storageType)) {
|
|
188
202
|
await STORAGE.UPDATE_STATE(values, storageType);
|
|
189
203
|
}
|
|
190
|
-
if (!_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()]) {
|
|
191
|
-
_listeners__WEBPACK_IMPORTED_MODULE_4__.LISTENERS[namespace()] = [];
|
|
192
|
-
}
|
|
193
204
|
for (const key in initialState) {
|
|
194
205
|
const fullKey = namespace(key);
|
|
195
206
|
STATE[fullKey] = setupValue(key, namespace, values[fullKey], defaultValues[key], storageType);
|
|
@@ -198,9 +209,9 @@ async function addState(namespace, initialState, isPersistent) {
|
|
|
198
209
|
}
|
|
199
210
|
function setupValue(key, namespace, value, defaultValue, storageType) {
|
|
200
211
|
const fullKey = namespace(key);
|
|
201
|
-
const isComputedValue = (0,
|
|
212
|
+
const isComputedValue = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isFunction)(value);
|
|
202
213
|
const dependencies = isComputedValue
|
|
203
|
-
? (0,
|
|
214
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.getParamNames)(value)
|
|
204
215
|
: [];
|
|
205
216
|
dependencies.forEach((dependency) => {
|
|
206
217
|
const fullDependencyKey = namespace(dependency);
|
|
@@ -230,10 +241,10 @@ function setupValue(key, namespace, value, defaultValue, storageType) {
|
|
|
230
241
|
};
|
|
231
242
|
}
|
|
232
243
|
function getNamespaceState(namespace) {
|
|
233
|
-
return (0,
|
|
244
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(STATE, (k, { key }) => k === namespace(key));
|
|
234
245
|
}
|
|
235
246
|
function getValues(namespace) {
|
|
236
|
-
return (0,
|
|
247
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(getNamespaceState(namespace), (k, { key, value }) => [
|
|
237
248
|
key,
|
|
238
249
|
value,
|
|
239
250
|
]);
|
|
@@ -243,7 +254,7 @@ function getArguments(dependencies, namespace) {
|
|
|
243
254
|
return dependencies.map((name) => values[name]);
|
|
244
255
|
}
|
|
245
256
|
async function joinStateChanges(changesPiece) {
|
|
246
|
-
for (const [updateId, { storageTypes, readyStorageTypes, changes },] of Object.entries(
|
|
257
|
+
for (const [updateId, { storageTypes, readyStorageTypes, changes },] of Object.entries(STATE_CHANGED_PIECES)) {
|
|
247
258
|
if (changesPiece[updateId]) {
|
|
248
259
|
const storageType = changesPiece[updateId].newValue;
|
|
249
260
|
readyStorageTypes[storageType] = true;
|
|
@@ -257,7 +268,7 @@ async function joinStateChanges(changesPiece) {
|
|
|
257
268
|
return;
|
|
258
269
|
}
|
|
259
270
|
}
|
|
260
|
-
delete
|
|
271
|
+
delete STATE_CHANGED_PIECES[updateId];
|
|
261
272
|
await onStateChange(changes);
|
|
262
273
|
}
|
|
263
274
|
}
|
|
@@ -276,7 +287,7 @@ async function onStateChange(changes) {
|
|
|
276
287
|
}
|
|
277
288
|
updateDependencies(key, changes, realChanges);
|
|
278
289
|
}
|
|
279
|
-
await (0,
|
|
290
|
+
await (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.runStateChangeListeners)((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(realChanges, (k, v) => !v.isSame));
|
|
280
291
|
}
|
|
281
292
|
function updateDependencies(key, changes, realChanges) {
|
|
282
293
|
STATE[key].dependants?.forEach((name) => {
|
|
@@ -302,16 +313,16 @@ function isEveryDependencyReady(dependencies, namespace, changesKeys, realChange
|
|
|
302
313
|
});
|
|
303
314
|
}
|
|
304
315
|
function getState(namespace, arg) {
|
|
305
|
-
if ((0,
|
|
316
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arg)) {
|
|
306
317
|
return createStore(arg);
|
|
307
318
|
}
|
|
308
|
-
return (0,
|
|
319
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.recreateStructure)(getValues(namespace));
|
|
309
320
|
}
|
|
310
321
|
async function setState(namespace, changes) {
|
|
311
322
|
const storageChanges = {};
|
|
312
|
-
const updateId = (0,
|
|
323
|
+
const updateId = (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.uid)();
|
|
313
324
|
const storageTypes = {};
|
|
314
|
-
(0,
|
|
325
|
+
(0,_helpers__WEBPACK_IMPORTED_MODULE_2__.forEach)(changes, (k, v) => {
|
|
315
326
|
const fullKey = namespace(k);
|
|
316
327
|
const { storageType, computeFn, isAction } = STATE[fullKey];
|
|
317
328
|
if (computeFn || isAction) {
|
|
@@ -323,7 +334,7 @@ async function setState(namespace, changes) {
|
|
|
323
334
|
storageTypes[storageType] = true;
|
|
324
335
|
storageChanges[storageType][fullKey] = v;
|
|
325
336
|
});
|
|
326
|
-
|
|
337
|
+
STATE_CHANGED_PIECES[updateId] = {
|
|
327
338
|
storageTypes,
|
|
328
339
|
readyStorageTypes: {},
|
|
329
340
|
changes: {},
|
|
@@ -340,23 +351,41 @@ async function setValues(storageType, changes) {
|
|
|
340
351
|
return;
|
|
341
352
|
}
|
|
342
353
|
}
|
|
343
|
-
joinStateChanges((0,
|
|
354
|
+
joinStateChanges((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(changes, (k, newValue) => [k, { newValue }]));
|
|
344
355
|
}
|
|
345
356
|
async function resetState(namespace, keys) {
|
|
357
|
+
return setState(namespace, getDefaultValues(namespace, keys));
|
|
358
|
+
}
|
|
359
|
+
function getDefaultValues(namespace, keys) {
|
|
346
360
|
const namespaceState = getNamespaceState(namespace);
|
|
347
|
-
|
|
348
|
-
? (0,
|
|
349
|
-
: namespaceState, (k, { key, defaultValue }) => [key, defaultValue])
|
|
350
|
-
|
|
361
|
+
return (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.map)(keys
|
|
362
|
+
? (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.filter)(namespaceState, (k, { key }) => keys.includes(key))
|
|
363
|
+
: namespaceState, (k, { key, defaultValue }) => [key, defaultValue]);
|
|
364
|
+
}
|
|
365
|
+
function createPendingChanges(namespace) {
|
|
366
|
+
const flush = () => {
|
|
367
|
+
const changes = STATE_PENDING_CHANGES[namespace()];
|
|
368
|
+
STATE_PENDING_CHANGES[namespace()] = {};
|
|
369
|
+
return changes;
|
|
370
|
+
};
|
|
371
|
+
return {
|
|
372
|
+
add: (changes) => Object.assign(STATE_PENDING_CHANGES[namespace()], changes),
|
|
373
|
+
reset: (keys) => Object.assign(STATE_PENDING_CHANGES[namespace()], getDefaultValues(namespace, keys)),
|
|
374
|
+
get: () => STATE_PENDING_CHANGES[namespace()],
|
|
375
|
+
flush,
|
|
376
|
+
commit: () => setState(namespace, flush()),
|
|
377
|
+
};
|
|
351
378
|
}
|
|
352
379
|
function main(namespace) {
|
|
353
|
-
if (!arguments[1] || (0,
|
|
380
|
+
if (!arguments[1] || (0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(arguments[1])) {
|
|
354
381
|
return getState.apply(null, arguments);
|
|
355
382
|
}
|
|
356
|
-
if ((0,
|
|
357
|
-
|
|
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);
|
|
358
387
|
}
|
|
359
|
-
if ((0,
|
|
388
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isObject)(arguments[1])) {
|
|
360
389
|
return setState.apply(null, arguments);
|
|
361
390
|
}
|
|
362
391
|
}
|
|
@@ -364,19 +393,26 @@ function setStorageUtils(storageUtils) {
|
|
|
364
393
|
Object.assign(STORAGE, storageUtils);
|
|
365
394
|
}
|
|
366
395
|
function addNamespace(namespace, str) {
|
|
367
|
-
return `${namespace}${((0,
|
|
396
|
+
return `${namespace}${((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isString)(str) && _constants__WEBPACK_IMPORTED_MODULE_4__.NAMESPACE_DELIMITER) || ""}${str || ""}`;
|
|
368
397
|
}
|
|
369
398
|
function createStore(_namespace) {
|
|
370
399
|
const namespace = ((key) => addNamespace(_namespace, key));
|
|
400
|
+
if (!STATE_PENDING_CHANGES[namespace()]) {
|
|
401
|
+
STATE_PENDING_CHANGES[namespace()] = {};
|
|
402
|
+
}
|
|
403
|
+
if (!_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()]) {
|
|
404
|
+
_listeners__WEBPACK_IMPORTED_MODULE_5__.LISTENERS[namespace()] = [];
|
|
405
|
+
}
|
|
371
406
|
return Object.assign(main.bind(null, namespace), {
|
|
372
407
|
add: (state) => addState(namespace, state, false),
|
|
373
408
|
addPersistent: (state) => addState(namespace, state, true),
|
|
374
409
|
get: (newNamespace) => getState(namespace, newNamespace),
|
|
375
|
-
set:
|
|
410
|
+
set: (changes) => setState(namespace, changes),
|
|
376
411
|
reset: (keys) => resetState(namespace, keys),
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
412
|
+
changes: createPendingChanges(namespace),
|
|
413
|
+
onChange: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.addStateListener)(namespace, keys, cb),
|
|
414
|
+
removeListener: (keys, cb) => (0,_listeners__WEBPACK_IMPORTED_MODULE_5__.removeStateListener)(namespace, keys, cb),
|
|
415
|
+
actions: (actions) => (0,_actions__WEBPACK_IMPORTED_MODULE_3__.addStateActions)(namespace, actions),
|
|
380
416
|
setStorageUtils,
|
|
381
417
|
joinStateChanges,
|
|
382
418
|
namespace,
|
|
@@ -401,22 +437,24 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
401
437
|
/* harmony export */ removeStateListener: () => (/* binding */ removeStateListener),
|
|
402
438
|
/* harmony export */ runStateChangeListeners: () => (/* binding */ runStateChangeListeners)
|
|
403
439
|
/* harmony export */ });
|
|
404
|
-
/* harmony import */ var
|
|
405
|
-
/* harmony import */ var
|
|
406
|
-
/* harmony import */ var
|
|
440
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./src/types.d.ts");
|
|
441
|
+
/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_0__);
|
|
442
|
+
/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ "./src/index.ts");
|
|
443
|
+
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
444
|
+
/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ "./src/helpers.ts");
|
|
445
|
+
|
|
407
446
|
|
|
408
447
|
|
|
409
448
|
|
|
410
449
|
const LISTENERS = {};
|
|
411
450
|
async function runStateChangeListeners(realChanges) {
|
|
412
451
|
if (Object.keys(realChanges).length) {
|
|
413
|
-
const { namespace } =
|
|
414
|
-
const
|
|
415
|
-
|
|
416
|
-
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_0__.STATE[changeKey];
|
|
452
|
+
const { namespace } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[Object.keys(realChanges)[0]];
|
|
453
|
+
for (const [changeKey] of Object.entries(realChanges)) {
|
|
454
|
+
const { listeners, key } = ___WEBPACK_IMPORTED_MODULE_1__.STATE[changeKey];
|
|
417
455
|
for (const cb of listeners) {
|
|
418
|
-
const fn = cb.bind(null, [key],
|
|
419
|
-
if ((0,
|
|
456
|
+
const fn = cb.bind(null, [key], (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace()));
|
|
457
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(cb)) {
|
|
420
458
|
await fn();
|
|
421
459
|
}
|
|
422
460
|
else {
|
|
@@ -424,14 +462,11 @@ async function runStateChangeListeners(realChanges) {
|
|
|
424
462
|
}
|
|
425
463
|
}
|
|
426
464
|
}
|
|
427
|
-
const namespaceLength = `${namespace()}${
|
|
428
|
-
const readableKeys = (0,
|
|
465
|
+
const namespaceLength = `${namespace()}${_constants__WEBPACK_IMPORTED_MODULE_2__.NAMESPACE_DELIMITER}`.length;
|
|
466
|
+
const readableKeys = (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.map)(realChanges, (k) => k.slice(namespaceLength));
|
|
429
467
|
for (const cb of LISTENERS[namespace()]) {
|
|
430
|
-
const fn = cb.bind(null, readableKeys,
|
|
431
|
-
|
|
432
|
-
v,
|
|
433
|
-
]));
|
|
434
|
-
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)) {
|
|
435
470
|
await fn();
|
|
436
471
|
}
|
|
437
472
|
else {
|
|
@@ -441,25 +476,25 @@ async function runStateChangeListeners(realChanges) {
|
|
|
441
476
|
}
|
|
442
477
|
}
|
|
443
478
|
function addStateListener(namespace, observables, cb) {
|
|
444
|
-
if ((0,
|
|
479
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
|
|
445
480
|
LISTENERS[namespace()].push(observables);
|
|
446
|
-
return (0,
|
|
481
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
447
482
|
}
|
|
448
|
-
observables.forEach((key) =>
|
|
449
|
-
return (0,
|
|
483
|
+
observables.forEach((key) => ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners?.push(cb));
|
|
484
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
450
485
|
}
|
|
451
486
|
function removeStateListener(namespace, observables, removeCb) {
|
|
452
|
-
if ((0,
|
|
487
|
+
if ((0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isFunction)(observables) || (0,_helpers__WEBPACK_IMPORTED_MODULE_3__.isAsyncFunction)(observables)) {
|
|
453
488
|
const removeIdx = LISTENERS[namespace()].findIndex((cb) => cb === observables);
|
|
454
489
|
LISTENERS[namespace()].splice(removeIdx, 1);
|
|
455
|
-
return (0,
|
|
490
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
456
491
|
}
|
|
457
492
|
observables.forEach((key) => {
|
|
458
|
-
const listeners =
|
|
493
|
+
const listeners = ___WEBPACK_IMPORTED_MODULE_1__.STATE[namespace(key)].listeners;
|
|
459
494
|
const removeIdx = listeners?.findIndex((cb) => cb === removeCb);
|
|
460
495
|
listeners?.splice(removeIdx, 1);
|
|
461
496
|
});
|
|
462
|
-
return (0,
|
|
497
|
+
return (0,___WEBPACK_IMPORTED_MODULE_1__.createStore)(namespace());
|
|
463
498
|
}
|
|
464
499
|
|
|
465
500
|
|
|
@@ -476,6 +511,9 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
476
511
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
477
512
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
478
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
|
+
|
|
479
517
|
async function updateFromLocalStorage(state) {
|
|
480
518
|
const stored = {};
|
|
481
519
|
for (const key in state) {
|
|
@@ -527,7 +565,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
527
565
|
/* harmony export */ isBackgroundScript: () => (/* binding */ isBackgroundScript),
|
|
528
566
|
/* harmony export */ isSessionStorageSupport: () => (/* binding */ isSessionStorageSupport)
|
|
529
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__);
|
|
530
570
|
const browser = __webpack_require__(/*! webextension-polyfill/dist/browser-polyfill.min */ "./node_modules/webextension-polyfill/dist/browser-polyfill.min.js");
|
|
571
|
+
|
|
531
572
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
|
|
532
573
|
GET_TYPE: getStorageType,
|
|
533
574
|
IS_AVAILABE: isStorageAvailable,
|
|
@@ -620,6 +661,18 @@ var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_
|
|
|
620
661
|
/******/ }
|
|
621
662
|
/******/
|
|
622
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
|
+
/******/
|
|
623
676
|
/******/ /* webpack/runtime/define property getters */
|
|
624
677
|
/******/ (() => {
|
|
625
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){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})());
|
|
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})());
|