@koine/browser 2.0.0-beta.8 → 2.0.0-beta.80
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 +1 -1
- package/createStorage.cjs.d.ts +2 -0
- package/createStorage.cjs.default.js +1 -0
- package/createStorage.cjs.js +101 -0
- package/createStorage.cjs.mjs +2 -0
- package/createStorage.d.ts +1 -43
- package/createStorage.esm.js +96 -0
- package/getZonedDate.cjs.d.ts +2 -0
- package/getZonedDate.cjs.default.js +1 -0
- package/getZonedDate.cjs.js +29 -0
- package/getZonedDate.cjs.mjs +2 -0
- package/getZonedDate.d.ts +1 -15
- package/getZonedDate.esm.js +24 -0
- package/gtag.cjs.d.ts +2 -0
- package/gtag.cjs.default.js +1 -0
- package/gtag.cjs.js +15 -0
- package/gtag.cjs.mjs +2 -0
- package/gtag.d.ts +2 -0
- package/gtag.esm.js +10 -0
- package/gtagPageview.cjs.d.ts +2 -0
- package/gtagPageview.cjs.default.js +1 -0
- package/gtagPageview.cjs.js +15 -0
- package/gtagPageview.cjs.mjs +2 -0
- package/gtagPageview.d.ts +1 -4
- package/gtagPageview.esm.js +10 -0
- package/index.cjs.d.ts +1 -0
- package/index.cjs.default.js +1 -0
- package/index.cjs.js +45 -0
- package/index.cjs.mjs +2 -0
- package/index.d.ts +4 -1
- package/index.esm.js +20 -0
- package/isIE.cjs.d.ts +2 -0
- package/isIE.cjs.default.js +1 -0
- package/isIE.cjs.js +19 -0
- package/isIE.cjs.mjs +2 -0
- package/isIE.d.ts +1 -6
- package/isIE.esm.js +14 -0
- package/isMobile.cjs.d.ts +2 -0
- package/isMobile.cjs.default.js +1 -0
- package/isMobile.cjs.js +13 -0
- package/isMobile.cjs.mjs +2 -0
- package/isMobile.d.ts +1 -6
- package/isMobile.esm.js +8 -0
- package/listenUrlSearch.cjs.d.ts +2 -0
- package/listenUrlSearch.cjs.default.js +1 -0
- package/listenUrlSearch.cjs.js +46 -0
- package/listenUrlSearch.cjs.mjs +2 -0
- package/listenUrlSearch.d.ts +3 -0
- package/listenUrlSearch.esm.js +41 -0
- package/listenUrlSearchParams.cjs.d.ts +2 -0
- package/listenUrlSearchParams.cjs.default.js +1 -0
- package/listenUrlSearchParams.cjs.js +19 -0
- package/listenUrlSearchParams.cjs.mjs +2 -0
- package/listenUrlSearchParams.d.ts +2 -0
- package/listenUrlSearchParams.esm.js +14 -0
- package/navigateToHash.cjs.d.ts +2 -0
- package/navigateToHash.cjs.default.js +1 -0
- package/navigateToHash.cjs.js +13 -0
- package/navigateToHash.cjs.mjs +2 -0
- package/navigateToHash.d.ts +1 -7
- package/navigateToHash.esm.js +8 -0
- package/navigateToHashParams.cjs.d.ts +2 -0
- package/navigateToHashParams.cjs.default.js +1 -0
- package/navigateToHashParams.cjs.js +20 -0
- package/navigateToHashParams.cjs.mjs +2 -0
- package/navigateToHashParams.d.ts +2 -8
- package/navigateToHashParams.esm.js +15 -0
- package/navigateToMergedHashParams.cjs.d.ts +2 -0
- package/navigateToMergedHashParams.cjs.default.js +1 -0
- package/navigateToMergedHashParams.cjs.js +11 -0
- package/navigateToMergedHashParams.cjs.mjs +2 -0
- package/navigateToMergedHashParams.d.ts +2 -7
- package/navigateToMergedHashParams.esm.js +6 -0
- package/navigateToMergedParams.cjs.d.ts +2 -0
- package/navigateToMergedParams.cjs.default.js +1 -0
- package/navigateToMergedParams.cjs.js +12 -0
- package/navigateToMergedParams.cjs.mjs +2 -0
- package/navigateToMergedParams.d.ts +2 -8
- package/navigateToMergedParams.esm.js +7 -0
- package/navigateToParams.cjs.d.ts +2 -0
- package/navigateToParams.cjs.default.js +1 -0
- package/navigateToParams.cjs.js +17 -0
- package/navigateToParams.cjs.mjs +2 -0
- package/navigateToParams.d.ts +2 -9
- package/navigateToParams.esm.js +12 -0
- package/navigateToUrl.cjs.d.ts +2 -0
- package/navigateToUrl.cjs.default.js +1 -0
- package/navigateToUrl.cjs.js +12 -0
- package/navigateToUrl.cjs.mjs +2 -0
- package/navigateToUrl.d.ts +1 -6
- package/navigateToUrl.esm.js +7 -0
- package/navigateWithoutUrlParam.cjs.d.ts +2 -0
- package/navigateWithoutUrlParam.cjs.default.js +1 -0
- package/navigateWithoutUrlParam.cjs.js +21 -0
- package/navigateWithoutUrlParam.cjs.mjs +2 -0
- package/navigateWithoutUrlParam.d.ts +1 -7
- package/navigateWithoutUrlParam.esm.js +16 -0
- package/package.json +108 -10
- package/redirectTo.cjs.d.ts +2 -0
- package/redirectTo.cjs.default.js +1 -0
- package/redirectTo.cjs.js +15 -0
- package/redirectTo.cjs.mjs +2 -0
- package/redirectTo.d.ts +2 -8
- package/redirectTo.esm.js +10 -0
- package/storage.cjs.d.ts +2 -0
- package/storage.cjs.default.js +1 -0
- package/storage.cjs.js +14 -0
- package/storage.cjs.mjs +2 -0
- package/storage.d.ts +1 -4
- package/storage.esm.js +9 -0
- package/storageClient.cjs.d.ts +2 -0
- package/storageClient.cjs.default.js +1 -0
- package/storageClient.cjs.js +98 -0
- package/storageClient.cjs.mjs +2 -0
- package/storageClient.d.ts +1 -4
- package/{storageClient.mjs → storageClient.esm.js} +32 -34
- package/createStorage.js +0 -146
- package/createStorage.mjs +0 -130
- package/getZonedDate.js +0 -37
- package/getZonedDate.mjs +0 -31
- package/gtagPageview.js +0 -41
- package/gtagPageview.mjs +0 -23
- package/index.js +0 -72
- package/index.mjs +0 -15
- package/isIE.js +0 -31
- package/isIE.mjs +0 -16
- package/isMobile.js +0 -29
- package/isMobile.mjs +0 -14
- package/navigateToHash.js +0 -25
- package/navigateToHash.mjs +0 -11
- package/navigateToHashParams.js +0 -33
- package/navigateToHashParams.mjs +0 -19
- package/navigateToMergedHashParams.js +0 -26
- package/navigateToMergedHashParams.mjs +0 -11
- package/navigateToMergedParams.js +0 -26
- package/navigateToMergedParams.mjs +0 -12
- package/navigateToParams.js +0 -30
- package/navigateToParams.mjs +0 -17
- package/navigateToUrl.js +0 -28
- package/navigateToUrl.mjs +0 -10
- package/navigateWithoutUrlParam.js +0 -32
- package/navigateWithoutUrlParam.mjs +0 -18
- package/redirectTo.js +0 -28
- package/redirectTo.mjs +0 -14
- package/storage.js +0 -25
- package/storage.mjs +0 -8
- package/storageClient.js +0 -112
- package/typings.d.ts +0 -12
package/package.json
CHANGED
|
@@ -2,15 +2,113 @@
|
|
|
2
2
|
"name": "@koine/browser",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@koine/dom": "2.0.0-beta.
|
|
6
|
-
"@koine/utils": "2.0.0-beta.
|
|
5
|
+
"@koine/dom": "2.0.0-beta.80",
|
|
6
|
+
"@koine/utils": "2.0.0-beta.80"
|
|
7
7
|
},
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
"date-fns-tz": "^2.0.0",
|
|
13
|
-
"type-fest": "^3.12.0"
|
|
8
|
+
"peerDependenciesMeta": {
|
|
9
|
+
"date-fns-tz": {
|
|
10
|
+
"optional": true
|
|
11
|
+
}
|
|
14
12
|
},
|
|
15
|
-
"
|
|
16
|
-
|
|
13
|
+
"exports": {
|
|
14
|
+
"./package.json": "./package.json",
|
|
15
|
+
".": {
|
|
16
|
+
"module": "./index.esm.js",
|
|
17
|
+
"import": "./index.cjs.mjs",
|
|
18
|
+
"default": "./index.cjs.js"
|
|
19
|
+
},
|
|
20
|
+
"./createStorage": {
|
|
21
|
+
"module": "./createStorage.esm.js",
|
|
22
|
+
"import": "./createStorage.cjs.mjs",
|
|
23
|
+
"default": "./createStorage.cjs.js"
|
|
24
|
+
},
|
|
25
|
+
"./getZonedDate": {
|
|
26
|
+
"module": "./getZonedDate.esm.js",
|
|
27
|
+
"import": "./getZonedDate.cjs.mjs",
|
|
28
|
+
"default": "./getZonedDate.cjs.js"
|
|
29
|
+
},
|
|
30
|
+
"./gtag": {
|
|
31
|
+
"module": "./gtag.esm.js",
|
|
32
|
+
"import": "./gtag.cjs.mjs",
|
|
33
|
+
"default": "./gtag.cjs.js"
|
|
34
|
+
},
|
|
35
|
+
"./gtagPageview": {
|
|
36
|
+
"module": "./gtagPageview.esm.js",
|
|
37
|
+
"import": "./gtagPageview.cjs.mjs",
|
|
38
|
+
"default": "./gtagPageview.cjs.js"
|
|
39
|
+
},
|
|
40
|
+
"./isIE": {
|
|
41
|
+
"module": "./isIE.esm.js",
|
|
42
|
+
"import": "./isIE.cjs.mjs",
|
|
43
|
+
"default": "./isIE.cjs.js"
|
|
44
|
+
},
|
|
45
|
+
"./isMobile": {
|
|
46
|
+
"module": "./isMobile.esm.js",
|
|
47
|
+
"import": "./isMobile.cjs.mjs",
|
|
48
|
+
"default": "./isMobile.cjs.js"
|
|
49
|
+
},
|
|
50
|
+
"./listenUrlSearch": {
|
|
51
|
+
"module": "./listenUrlSearch.esm.js",
|
|
52
|
+
"import": "./listenUrlSearch.cjs.mjs",
|
|
53
|
+
"default": "./listenUrlSearch.cjs.js"
|
|
54
|
+
},
|
|
55
|
+
"./listenUrlSearchParams": {
|
|
56
|
+
"module": "./listenUrlSearchParams.esm.js",
|
|
57
|
+
"import": "./listenUrlSearchParams.cjs.mjs",
|
|
58
|
+
"default": "./listenUrlSearchParams.cjs.js"
|
|
59
|
+
},
|
|
60
|
+
"./navigateToHash": {
|
|
61
|
+
"module": "./navigateToHash.esm.js",
|
|
62
|
+
"import": "./navigateToHash.cjs.mjs",
|
|
63
|
+
"default": "./navigateToHash.cjs.js"
|
|
64
|
+
},
|
|
65
|
+
"./navigateToHashParams": {
|
|
66
|
+
"module": "./navigateToHashParams.esm.js",
|
|
67
|
+
"import": "./navigateToHashParams.cjs.mjs",
|
|
68
|
+
"default": "./navigateToHashParams.cjs.js"
|
|
69
|
+
},
|
|
70
|
+
"./navigateToMergedHashParams": {
|
|
71
|
+
"module": "./navigateToMergedHashParams.esm.js",
|
|
72
|
+
"import": "./navigateToMergedHashParams.cjs.mjs",
|
|
73
|
+
"default": "./navigateToMergedHashParams.cjs.js"
|
|
74
|
+
},
|
|
75
|
+
"./navigateToMergedParams": {
|
|
76
|
+
"module": "./navigateToMergedParams.esm.js",
|
|
77
|
+
"import": "./navigateToMergedParams.cjs.mjs",
|
|
78
|
+
"default": "./navigateToMergedParams.cjs.js"
|
|
79
|
+
},
|
|
80
|
+
"./navigateToParams": {
|
|
81
|
+
"module": "./navigateToParams.esm.js",
|
|
82
|
+
"import": "./navigateToParams.cjs.mjs",
|
|
83
|
+
"default": "./navigateToParams.cjs.js"
|
|
84
|
+
},
|
|
85
|
+
"./navigateToUrl": {
|
|
86
|
+
"module": "./navigateToUrl.esm.js",
|
|
87
|
+
"import": "./navigateToUrl.cjs.mjs",
|
|
88
|
+
"default": "./navigateToUrl.cjs.js"
|
|
89
|
+
},
|
|
90
|
+
"./navigateWithoutUrlParam": {
|
|
91
|
+
"module": "./navigateWithoutUrlParam.esm.js",
|
|
92
|
+
"import": "./navigateWithoutUrlParam.cjs.mjs",
|
|
93
|
+
"default": "./navigateWithoutUrlParam.cjs.js"
|
|
94
|
+
},
|
|
95
|
+
"./redirectTo": {
|
|
96
|
+
"module": "./redirectTo.esm.js",
|
|
97
|
+
"import": "./redirectTo.cjs.mjs",
|
|
98
|
+
"default": "./redirectTo.cjs.js"
|
|
99
|
+
},
|
|
100
|
+
"./storage": {
|
|
101
|
+
"module": "./storage.esm.js",
|
|
102
|
+
"import": "./storage.cjs.mjs",
|
|
103
|
+
"default": "./storage.cjs.js"
|
|
104
|
+
},
|
|
105
|
+
"./storageClient": {
|
|
106
|
+
"module": "./storageClient.esm.js",
|
|
107
|
+
"import": "./storageClient.cjs.mjs",
|
|
108
|
+
"default": "./storageClient.cjs.js"
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"module": "./index.esm.js",
|
|
112
|
+
"main": "./index.cjs.js",
|
|
113
|
+
"version": "2.0.0-beta.80"
|
|
114
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./redirectTo.cjs.js').default;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var utils = require('@koine/utils');
|
|
6
|
+
|
|
7
|
+
let redirectTo = (url, params) => {
|
|
8
|
+
if (utils.isBrowser) {
|
|
9
|
+
const queryString = utils.buildUrlQueryString(params);
|
|
10
|
+
location.href = url.replace(/\?+$/g, "") + queryString;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
exports["default"] = redirectTo;
|
|
15
|
+
exports.redirectTo = redirectTo;
|
package/redirectTo.d.ts
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
* Redirect to url with params {optionally}, removes eventual trailing question
|
|
4
|
-
* marks from the given URL, it uses `location`
|
|
5
|
-
*
|
|
6
|
-
* @category location
|
|
7
|
-
*/
|
|
8
|
-
export declare function redirectTo(url: string, params?: AnyQueryParams): void;
|
|
1
|
+
import { type AnyQueryParams } from "@koine/utils";
|
|
2
|
+
export declare let redirectTo: (url: string, params?: AnyQueryParams) => void;
|
|
9
3
|
export default redirectTo;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { isBrowser, buildUrlQueryString } from '@koine/utils';
|
|
2
|
+
|
|
3
|
+
let redirectTo = (url, params) => {
|
|
4
|
+
if (isBrowser) {
|
|
5
|
+
const queryString = buildUrlQueryString(params);
|
|
6
|
+
location.href = url.replace(/\?+$/g, "") + queryString;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export { redirectTo as default, redirectTo };
|
package/storage.cjs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./storage.cjs.js').default;
|
package/storage.cjs.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var storageClient = require('./storageClient.cjs.js');
|
|
6
|
+
require('@koine/utils');
|
|
7
|
+
|
|
8
|
+
let storage = {
|
|
9
|
+
l: storageClient.storageClient(),
|
|
10
|
+
s: storageClient.storageClient(true),
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports["default"] = storage;
|
|
14
|
+
exports.storage = storage;
|
package/storage.cjs.mjs
ADDED
package/storage.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Storage, for `localStorage` and `sessionStorage`
|
|
3
|
-
*/
|
|
4
|
-
export declare const storage: {
|
|
1
|
+
export declare let storage: {
|
|
5
2
|
l: {
|
|
6
3
|
get: <TKey extends string, TValue = any>(key: TKey, transform?: ((value: string) => TValue) | undefined, defaultValue?: TValue | null | undefined) => NonNullable<TValue> | null;
|
|
7
4
|
set: <TKey_1 extends string, TValue_1 = any>(key: TKey_1, value?: TValue_1 | undefined, transform?: (value: any) => string) => void;
|
package/storage.esm.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./storageClient.cjs.js').default;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var utils = require('@koine/utils');
|
|
6
|
+
|
|
7
|
+
const methodsMap = { g: "getItem", s: "setItem", r: "removeItem" };
|
|
8
|
+
let storageClient = (useSessionStorage) => {
|
|
9
|
+
const nativeMethod = (method, key, value) => utils.isBrowser
|
|
10
|
+
? window[useSessionStorage ? "sessionStorage" : "localStorage"][methodsMap[method]](key, value)
|
|
11
|
+
: () => {
|
|
12
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
13
|
+
console.warn(`[@koine/utils:storageClient]: ${useSessionStorage ? "sessionStorage" : "localStorage"} does not exists outside of browser.`);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const get = (key, transform, defaultValue) => {
|
|
17
|
+
let value = defaultValue ?? null;
|
|
18
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
19
|
+
if (!utils.isBrowser) {
|
|
20
|
+
console.log(`[@koine/utils:storage] called 'get' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (utils.isBrowser) {
|
|
24
|
+
let stored = nativeMethod("g", key);
|
|
25
|
+
if (stored) {
|
|
26
|
+
stored = transform ? transform(stored) : stored;
|
|
27
|
+
try {
|
|
28
|
+
const parsed = JSON.parse(stored);
|
|
29
|
+
if (parsed)
|
|
30
|
+
value = parsed;
|
|
31
|
+
}
|
|
32
|
+
catch (_e) {
|
|
33
|
+
value = stored;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return value;
|
|
38
|
+
};
|
|
39
|
+
const set = (key, value, transform = (value) => value) => {
|
|
40
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
41
|
+
if (!utils.isBrowser) {
|
|
42
|
+
console.log(`[@koine/utils:storage] called 'set' outside of browser does not work.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (utils.isBrowser) {
|
|
46
|
+
try {
|
|
47
|
+
const transformedValue = utils.isString(value)
|
|
48
|
+
? transform(value)
|
|
49
|
+
: transform(JSON.stringify(value));
|
|
50
|
+
nativeMethod("s", key, transformedValue);
|
|
51
|
+
}
|
|
52
|
+
catch (_e) {
|
|
53
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
54
|
+
console.warn(`[@koine/utils:createStorage]: 'set' error.`, _e);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const remove = (key) => {
|
|
60
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
61
|
+
if (!utils.isBrowser) {
|
|
62
|
+
console.log(`[@koine/utils:storage] called 'remove' outside of browser does not work.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (utils.isBrowser) {
|
|
66
|
+
try {
|
|
67
|
+
nativeMethod("r", key);
|
|
68
|
+
}
|
|
69
|
+
catch (_e) {
|
|
70
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
71
|
+
console.warn(`[@koine/utils:createStorage]: 'remove' error.`, _e);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const has = (key, defaultValue) => {
|
|
77
|
+
let value = defaultValue ?? false;
|
|
78
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
79
|
+
if (!utils.isBrowser) {
|
|
80
|
+
console.log(`[@koine/utils:storage] called 'has' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (utils.isBrowser) {
|
|
84
|
+
const stored = nativeMethod("g", key);
|
|
85
|
+
value = stored ?? false;
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
};
|
|
89
|
+
return {
|
|
90
|
+
get,
|
|
91
|
+
set,
|
|
92
|
+
remove,
|
|
93
|
+
has,
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
exports["default"] = storageClient;
|
|
98
|
+
exports.storageClient = storageClient;
|
package/storageClient.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
export type StorageClientConfig = Record<string, any>;
|
|
2
|
-
|
|
3
|
-
* Super minifiable `local/session Storage` client creator with SSR safety
|
|
4
|
-
*/
|
|
5
|
-
export declare const storageClient: <TConfig extends StorageClientConfig = StorageClientConfig>(useSessionStorage?: boolean) => {
|
|
2
|
+
export declare let storageClient: <TConfig extends StorageClientConfig = StorageClientConfig>(useSessionStorage?: boolean) => {
|
|
6
3
|
get: <TKey extends Extract<keyof TConfig, string>, TValue = TConfig[TKey]>(key: TKey, transform?: ((value: string) => TValue) | undefined, defaultValue?: TValue | null | undefined) => NonNullable<TValue> | null;
|
|
7
4
|
set: <TKey_1 extends Extract<keyof TConfig, string>, TValue_1 = TConfig[TKey_1]>(key: TKey_1, value?: TValue_1 | undefined, transform?: (value: any) => string) => void;
|
|
8
5
|
remove: <TKey_2 extends Extract<keyof TConfig, string>>(key: TKey_2) => void;
|
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import isBrowser from
|
|
2
|
-
|
|
3
|
-
const methodsMap = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
* Super minifiable `local/session Storage` client creator with SSR safety
|
|
10
|
-
*/ export const storageClient = (useSessionStorage)=>{
|
|
11
|
-
const nativeMethod = (method, key, value)=>isBrowser ? window[useSessionStorage ? "sessionStorage" : "localStorage"][methodsMap[method]](key, value) : ()=>{
|
|
12
|
-
if (process.env["NODE_ENV"] !== "production") {
|
|
1
|
+
import { isBrowser, isString } from '@koine/utils';
|
|
2
|
+
|
|
3
|
+
const methodsMap = { g: "getItem", s: "setItem", r: "removeItem" };
|
|
4
|
+
let storageClient = (useSessionStorage) => {
|
|
5
|
+
const nativeMethod = (method, key, value) => isBrowser
|
|
6
|
+
? window[useSessionStorage ? "sessionStorage" : "localStorage"][methodsMap[method]](key, value)
|
|
7
|
+
: () => {
|
|
8
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
13
9
|
console.warn(`[@koine/utils:storageClient]: ${useSessionStorage ? "sessionStorage" : "localStorage"} does not exists outside of browser.`);
|
|
14
10
|
}
|
|
15
11
|
};
|
|
16
|
-
const get = (key, transform, defaultValue)=>{
|
|
12
|
+
const get = (key, transform, defaultValue) => {
|
|
17
13
|
let value = defaultValue ?? null;
|
|
18
|
-
if (process.env["NODE_ENV"]
|
|
14
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
19
15
|
if (!isBrowser) {
|
|
20
16
|
console.log(`[@koine/utils:storage] called 'get' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
21
17
|
}
|
|
@@ -26,38 +22,38 @@ const methodsMap = {
|
|
|
26
22
|
stored = transform ? transform(stored) : stored;
|
|
27
23
|
try {
|
|
28
24
|
const parsed = JSON.parse(stored);
|
|
29
|
-
if (parsed)
|
|
30
|
-
|
|
25
|
+
if (parsed)
|
|
26
|
+
value = parsed;
|
|
27
|
+
}
|
|
28
|
+
catch (_e) {
|
|
31
29
|
value = stored;
|
|
32
|
-
// if (process.env["NODE_ENV"] !== "production") {
|
|
33
|
-
// console.warn(
|
|
34
|
-
// `[@koine/utils:storage]: 'get' failed to parse stored value as JSON. Plain '${stored}' value is returned.`
|
|
35
|
-
// );
|
|
36
|
-
// }
|
|
37
30
|
}
|
|
38
31
|
}
|
|
39
32
|
}
|
|
40
33
|
return value;
|
|
41
34
|
};
|
|
42
|
-
const set = (key, value, transform = (value)=>value)=>{
|
|
43
|
-
if (process.env["NODE_ENV"]
|
|
35
|
+
const set = (key, value, transform = (value) => value) => {
|
|
36
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
44
37
|
if (!isBrowser) {
|
|
45
38
|
console.log(`[@koine/utils:storage] called 'set' outside of browser does not work.`);
|
|
46
39
|
}
|
|
47
40
|
}
|
|
48
41
|
if (isBrowser) {
|
|
49
42
|
try {
|
|
50
|
-
const transformedValue = isString(value)
|
|
43
|
+
const transformedValue = isString(value)
|
|
44
|
+
? transform(value)
|
|
45
|
+
: transform(JSON.stringify(value));
|
|
51
46
|
nativeMethod("s", key, transformedValue);
|
|
52
|
-
}
|
|
53
|
-
|
|
47
|
+
}
|
|
48
|
+
catch (_e) {
|
|
49
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
54
50
|
console.warn(`[@koine/utils:createStorage]: 'set' error.`, _e);
|
|
55
51
|
}
|
|
56
52
|
}
|
|
57
53
|
}
|
|
58
54
|
};
|
|
59
|
-
const remove = (key)=>{
|
|
60
|
-
if (process.env["NODE_ENV"]
|
|
55
|
+
const remove = (key) => {
|
|
56
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
61
57
|
if (!isBrowser) {
|
|
62
58
|
console.log(`[@koine/utils:storage] called 'remove' outside of browser does not work.`);
|
|
63
59
|
}
|
|
@@ -65,16 +61,17 @@ const methodsMap = {
|
|
|
65
61
|
if (isBrowser) {
|
|
66
62
|
try {
|
|
67
63
|
nativeMethod("r", key);
|
|
68
|
-
}
|
|
69
|
-
|
|
64
|
+
}
|
|
65
|
+
catch (_e) {
|
|
66
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
70
67
|
console.warn(`[@koine/utils:createStorage]: 'remove' error.`, _e);
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
70
|
}
|
|
74
71
|
};
|
|
75
|
-
const has = (key, defaultValue)=>{
|
|
72
|
+
const has = (key, defaultValue) => {
|
|
76
73
|
let value = defaultValue ?? false;
|
|
77
|
-
if (process.env["NODE_ENV"]
|
|
74
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
78
75
|
if (!isBrowser) {
|
|
79
76
|
console.log(`[@koine/utils:storage] called 'has' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
80
77
|
}
|
|
@@ -89,7 +86,8 @@ const methodsMap = {
|
|
|
89
86
|
get,
|
|
90
87
|
set,
|
|
91
88
|
remove,
|
|
92
|
-
has
|
|
89
|
+
has,
|
|
93
90
|
};
|
|
94
91
|
};
|
|
95
|
-
|
|
92
|
+
|
|
93
|
+
export { storageClient as default, storageClient };
|
package/createStorage.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
function _export(target, all) {
|
|
6
|
-
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: all[name]
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
_export(exports, {
|
|
12
|
-
createStorage: function() {
|
|
13
|
-
return createStorage;
|
|
14
|
-
},
|
|
15
|
-
default: function() {
|
|
16
|
-
return _default;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
const _interop_require_default = require("@swc/helpers/_/_interop_require_default");
|
|
20
|
-
const _decode = /*#__PURE__*/ _interop_require_default._(require("@koine/utils/decode"));
|
|
21
|
-
const _encode = /*#__PURE__*/ _interop_require_default._(require("@koine/utils/encode"));
|
|
22
|
-
const _isBrowser = /*#__PURE__*/ _interop_require_default._(require("@koine/utils/isBrowser"));
|
|
23
|
-
const _isNullOrUndefined = /*#__PURE__*/ _interop_require_default._(require("@koine/utils/isNullOrUndefined"));
|
|
24
|
-
const _noop = /*#__PURE__*/ _interop_require_default._(require("@koine/utils/noop"));
|
|
25
|
-
const _on = /*#__PURE__*/ _interop_require_default._(require("@koine/dom/on"));
|
|
26
|
-
const _storage = /*#__PURE__*/ _interop_require_default._(require("./storage"));
|
|
27
|
-
const createStorage = (config, useSessionStorage)=>{
|
|
28
|
-
const client = useSessionStorage ? _storage.default.s : _storage.default.l;
|
|
29
|
-
const keys = Object.keys(config).reduce((map, key)=>({
|
|
30
|
-
...map,
|
|
31
|
-
[key]: (0, _encode.default)(key)
|
|
32
|
-
}), {});
|
|
33
|
-
return {
|
|
34
|
-
/**
|
|
35
|
-
* Get all storage value (it uses `localStorage.get()`).
|
|
36
|
-
*
|
|
37
|
-
* Unparseable values with `JSON.parse()` return their value as it is.
|
|
38
|
-
* On ssr or if the given `key` argument is not found `defaultValue` is
|
|
39
|
-
* returned, otherwise `null`.
|
|
40
|
-
*/ get (key, defaultValue) {
|
|
41
|
-
return client.get(keys[key], _decode.default, defaultValue);
|
|
42
|
-
},
|
|
43
|
-
/**
|
|
44
|
-
* Get all storage values (it uses `localStorage.get()`).
|
|
45
|
-
*
|
|
46
|
-
* `undefined` and `null` values are not returned.
|
|
47
|
-
*/ getAll (defaultValues) {
|
|
48
|
-
if (!_isBrowser.default) {
|
|
49
|
-
if (process.env["NODE_ENV"] !== "production") {
|
|
50
|
-
console.log(`[@koine/utils:createStorage] attempt to use 'getAll' outside of browser.`);
|
|
51
|
-
}
|
|
52
|
-
return {};
|
|
53
|
-
}
|
|
54
|
-
const all = {};
|
|
55
|
-
for(const key in keys){
|
|
56
|
-
const value = this.get(key);
|
|
57
|
-
const defaultValue = defaultValues?.[key];
|
|
58
|
-
if (!(0, _isNullOrUndefined.default)(value)) {
|
|
59
|
-
all[key] = value;
|
|
60
|
-
} else if (defaultValue) {
|
|
61
|
-
all[key] = defaultValue;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
return all;
|
|
65
|
-
},
|
|
66
|
-
/**
|
|
67
|
-
* Set a storage value (it uses `localStorage.set()`).
|
|
68
|
-
*
|
|
69
|
-
* Non-string values are stringified with `JSON.stringify()`
|
|
70
|
-
*/ set (key, value) {
|
|
71
|
-
client.set(keys[key], value, _encode.default);
|
|
72
|
-
},
|
|
73
|
-
/**
|
|
74
|
-
* Set all given storage values (it uses `localStorage.set()`).
|
|
75
|
-
*
|
|
76
|
-
* Non-string values are stringified with `JSON.stringify()`, `undefined`
|
|
77
|
-
* and `null` values are removed from the storage
|
|
78
|
-
*/ setMany (newValues) {
|
|
79
|
-
if (process.env["NODE_ENV"] !== "production") {
|
|
80
|
-
if (!_isBrowser.default) {
|
|
81
|
-
console.log(`[@koine/utils:createStorage] attempt to use 'setMany' outside of browser.`);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (_isBrowser.default) {
|
|
85
|
-
for(const key in newValues){
|
|
86
|
-
const value = newValues[key];
|
|
87
|
-
if (!(0, _isNullOrUndefined.default)(value)) {
|
|
88
|
-
this.set(key, value);
|
|
89
|
-
} else {
|
|
90
|
-
this.remove(key);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
/**
|
|
96
|
-
* Check if a storage value is _truthy_ (it uses `localStorage.get()`).
|
|
97
|
-
*/ has (key) {
|
|
98
|
-
return client.has(keys[key]);
|
|
99
|
-
},
|
|
100
|
-
/**
|
|
101
|
-
* Remove a storage value (it uses `localStorage.remove()`).
|
|
102
|
-
*/ remove (key) {
|
|
103
|
-
client.remove(keys[key]);
|
|
104
|
-
},
|
|
105
|
-
/**
|
|
106
|
-
* Clear all storage values (it uses `localStorage.remove()`).
|
|
107
|
-
*/ clear () {
|
|
108
|
-
if (process.env["NODE_ENV"] !== "production") {
|
|
109
|
-
if (!_isBrowser.default) {
|
|
110
|
-
console.log(`[@koine/utils:createStorage] attempt to use 'clear' outside of browser.`);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
if (_isBrowser.default) {
|
|
114
|
-
for(const key in keys){
|
|
115
|
-
client.remove(keys[key]);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
},
|
|
119
|
-
/**
|
|
120
|
-
* Watch a storage value changes, this needs to be executed only in browser
|
|
121
|
-
* context (it uses `window.addEventListener("storage")`).
|
|
122
|
-
*
|
|
123
|
-
* Inspiration from [Multi Tab Logout in React — Redux](https://medium.com/front-end-weekly/multi-tab-logout-in-react-redux-4715f071c7fa)
|
|
124
|
-
*/ watch: (keyToWatch, onRemoved, onAdded)=>{
|
|
125
|
-
if (!_isBrowser.default) {
|
|
126
|
-
if (process.env["NODE_ENV"] !== "production") {
|
|
127
|
-
console.log(`[@koine/utils:createStorage] attempt to use 'watch' outside of browser.`);
|
|
128
|
-
}
|
|
129
|
-
return _noop.default;
|
|
130
|
-
}
|
|
131
|
-
const handler = (event)=>{
|
|
132
|
-
const { key, oldValue, newValue } = event;
|
|
133
|
-
if (key === keys[keyToWatch]) {
|
|
134
|
-
if (oldValue && !newValue) {
|
|
135
|
-
onRemoved?.();
|
|
136
|
-
} else if (!oldValue && newValue) {
|
|
137
|
-
onAdded?.();
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
const listener = (0, _on.default)(window, "storage", handler);
|
|
142
|
-
return listener;
|
|
143
|
-
}
|
|
144
|
-
};
|
|
145
|
-
};
|
|
146
|
-
const _default = createStorage;
|