@koine/browser 2.0.0-beta.72 → 2.0.0-beta.74
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/browser/createStorage.js +1 -0
- package/browser/getZonedDate.js +1 -0
- package/browser/gtag.js +1 -0
- package/browser/gtagPageview.js +1 -0
- package/browser/index.js +1 -0
- package/browser/isIE.js +1 -0
- package/browser/isMobile.js +1 -0
- package/browser/listenUrlSearch.js +1 -0
- package/browser/listenUrlSearchParams.js +1 -0
- package/browser/navigateToHash.js +1 -0
- package/browser/navigateToHashParams.js +1 -0
- package/browser/navigateToMergedHashParams.js +1 -0
- package/browser/navigateToMergedParams.js +1 -0
- package/browser/navigateToParams.js +1 -0
- package/browser/navigateToUrl.js +1 -0
- package/browser/navigateWithoutUrlParam.js +1 -0
- package/browser/redirectTo.js +1 -0
- package/browser/storage.js +1 -0
- package/browser/storageClient.js +1 -0
- package/createStorage.d.ts +1 -0
- package/createStorage.js +93 -0
- package/getZonedDate.d.ts +1 -0
- package/getZonedDate.js +22 -0
- package/gtag.d.ts +1 -0
- package/gtag.js +8 -0
- package/gtagPageview.d.ts +1 -0
- package/gtagPageview.js +7 -0
- package/index.cjs.js +12 -12
- package/index.esm.js +12 -12
- package/index.js +18 -0
- package/isIE.d.ts +1 -0
- package/isIE.js +12 -0
- package/isMobile.d.ts +1 -0
- package/isMobile.js +6 -0
- package/listenUrlSearch.d.ts +1 -1
- package/listenUrlSearch.js +39 -0
- package/listenUrlSearchParams.d.ts +1 -0
- package/listenUrlSearchParams.js +10 -0
- package/navigateToHash.d.ts +1 -0
- package/navigateToHash.js +6 -0
- package/navigateToHashParams.d.ts +1 -0
- package/navigateToHashParams.js +13 -0
- package/navigateToMergedHashParams.d.ts +1 -0
- package/navigateToMergedHashParams.js +4 -0
- package/navigateToMergedParams.d.ts +1 -0
- package/navigateToMergedParams.js +4 -0
- package/navigateToParams.d.ts +1 -0
- package/navigateToParams.js +10 -0
- package/navigateToUrl.d.ts +1 -0
- package/navigateToUrl.js +6 -0
- package/navigateWithoutUrlParam.d.ts +1 -0
- package/navigateWithoutUrlParam.js +13 -0
- package/package.json +3 -3
- package/redirectTo.d.ts +1 -0
- package/redirectTo.js +8 -0
- package/storage.d.ts +1 -0
- package/storage.js +6 -0
- package/storageClient.d.ts +1 -0
- package/storageClient.js +91 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{decode as e,encode as t,isBrowser as o,isNullOrUndefined as r,noop as s}from"@koine/utils";import{on as l}from"@koine/dom";import{storage as i}from"./storage";export let createStorage=(n,a)=>{let c=a?i.s:i.l,m=Object.keys(n).reduce((e,o)=>({...e,[o]:t(o)}),{});return{get:(t,o)=>c.get(m[t],e,o),getAll(e){if(!o)return"development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'getAll' outside of browser."),{};let t={};for(let o in m){let s=this.get(o),l=e?.[o];r(s)?l&&(t[o]=l):t[o]=s}return t},set(e,o){c.set(m[e],o,t)},setMany(e){if("development"!==process.env.NODE_ENV||o||console.log("[@koine/utils:createStorage] attempt to use 'setMany' outside of browser."),o)for(let t in e){let o=e[t];r(o)?this.remove(t):this.set(t,o)}},has:e=>c.has(m[e]),remove(e){c.remove(m[e])},clear(){if("development"!==process.env.NODE_ENV||o||console.log("[@koine/utils:createStorage] attempt to use 'clear' outside of browser."),o)for(let e in m)c.remove(m[e])},watch:(e,t,r)=>o?l(window,"storage",o=>{let{key:s,oldValue:l,newValue:i}=o;s===m[e]&&(l&&!i?t?.():!l&&i&&r?.())}):("development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'watch' outside of browser."),s)}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isBrowser as e}from"@koine/utils";let t=(e,t)=>e;export let getZonedDate=(o="",n)=>{if(o.endsWith("Z")||(o+="Z"),!n&&e)try{n=Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){"development"===process.env.NODE_ENV&&console.warn("[@koine/browser:getZonedDate] failed reading timeZone, error",e)}return n?t(new Date(o),n):new Date(o)};
|
package/browser/gtag.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isUndefined as o,noop as t}from"@koine/utils";export let gtag=(...g)=>{o(window)||o(window.gtag)?t():window.gtag(...g)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{gtag as e}from"./gtag";export let gtagPageview=(...t)=>e("event","page_view",{page_path:t[0]||location.pathname,page_title:t[1]||document.title,page_location:t[2]||location.href});
|
package/browser/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{createStorage}from"./createStorage";export{getZonedDate}from"./getZonedDate";export{gtag}from"./gtag";export{gtagPageview}from"./gtagPageview";export{isIE}from"./isIE";export{isMobile}from"./isMobile";export{listenUrlSearch}from"./listenUrlSearch";export{listenUrlSearchParams}from"./listenUrlSearchParams";export{navigateToHash}from"./navigateToHash";export{navigateToHashParams}from"./navigateToHashParams";export{navigateToMergedHashParams}from"./navigateToMergedHashParams";export{navigateToMergedParams}from"./navigateToMergedParams";export{navigateToParams}from"./navigateToParams";export{navigateToUrl}from"./navigateToUrl";export{navigateWithoutUrlParam}from"./navigateWithoutUrlParam";export{redirectTo}from"./redirectTo";export{storage}from"./storage";export{storageClient}from"./storageClient";
|
package/browser/isIE.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isServer as e}from"@koine/utils";export let isIE=(i=!0)=>{if(e)return i;let r=window.navigator.userAgent;return!!(r.indexOf("MSIE ")>0||r.indexOf("Trident/")>0)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isServer as i}from"@koine/utils";export let isMobile=(e=!0)=>i?e:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isBrowser as t}from"@koine/utils";import{on as e}from"@koine/dom";let o=(t,e,o)=>function(...r){if(o)return e(),t.apply(this,r);let i=t.apply(this,r);return e(),i},r=t?location.search:"",i=()=>{let t=location.search;if(t!==r)for(let e of history.__.h.values())e(r,t);r=t};export let listenUrlSearch=t=>(history.__||(history.pushState=o(history.pushState,i),history.replaceState=o(history.replaceState,i),e(window,"popstate",i),history.__={h:new Set}),history.__.h.has(t)||history.__.h.add(t),()=>{history.__.h.delete(t)});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{listenUrlSearch as e}from"./listenUrlSearch";export let listenUrlSearchParams=(r,a)=>e((e,t)=>{let l=new URLSearchParams(e),m=new URLSearchParams(t).get(r);l.get(r)!==m&&a(m)});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{navigateToUrl as o}from"./navigateToUrl";export let navigateToHash=(t="")=>{let{pathname:a,search:e}=location;o(a+(e?"?"+e:"")+(t?"#"+t:""),!0)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildUrlQueryString as t,getUrlHashPathname as o}from"@koine/utils";export let navigateToHashParams=(a={},e="")=>{let i=!e,r="#/"+o(e=e||location.hash)+("string"==typeof a?a:t(a));return i&&(location.hash=r),r};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getUrlHashParams as a,mergeUrlQueryParams as o}from"@koine/utils";import{navigateToHashParams as r}from"./navigateToHashParams";export let navigateToMergedHashParams=(e={},t="")=>r(o(a(t),e),t);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getUrlQueryParams as a,mergeUrlQueryParams as o}from"@koine/utils";import{navigateToParams as r}from"./navigateToParams";export let navigateToMergedParams=(e={},t)=>r(o(a(),e),t);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildUrlQueryString as t,isBrowser as o}from"@koine/utils";import{navigateToUrl as r}from"./navigateToUrl";export let navigateToParams=(a={},e)=>{let i="string"==typeof a?a:t(a);return o&&r(location.pathname+i,e),i};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export let navigateToUrl=(t="",e)=>{t&&history[e?"replaceState":"pushState"](history.state,"",t)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{getUrlQueryParams as t}from"@koine/utils";import{navigateToParams as r}from"./navigateToParams";export let navigateWithoutUrlParam=(o,a)=>{let e={},i=t();for(let t in i)t!==o&&(e[t]=i[t]);return r(e,a)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildUrlQueryString as e,isBrowser as o}from"@koine/utils";export let redirectTo=(r,t)=>{if(o){let o=e(t);location.href=r.replace(/\?+$/g,"")+o}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{storageClient as t}from"./storageClient";export let storage={l:t(),s:t(!0)};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isBrowser as e,isString as o}from"@koine/utils";let t={g:"getItem",s:"setItem",r:"removeItem"};export let storageClient=s=>{let r=(o,r,l)=>e?window[s?"sessionStorage":"localStorage"][t[o]](r,l):()=>{"development"===process.env.NODE_ENV&&console.warn(`[@koine/utils:storageClient]: ${s?"sessionStorage":"localStorage"} does not exists outside of browser.`)};return{get:(o,t,s)=>{let l=s??null;if("development"!==process.env.NODE_ENV||e||console.log(`[@koine/utils:storage] called 'get' outside of browser with default value '${JSON.stringify(s)}'.`),e){let e=r("g",o);if(e){e=t?t(e):e;try{let o=JSON.parse(e);o&&(l=o)}catch(o){l=e}}}return l},set:(t,s,l=e=>e)=>{if("development"!==process.env.NODE_ENV||e||console.log("[@koine/utils:storage] called 'set' outside of browser does not work."),e)try{let e=l(o(s)?s:JSON.stringify(s));r("s",t,e)}catch(e){"development"===process.env.NODE_ENV&&console.warn("[@koine/utils:createStorage]: 'set' error.",e)}},remove:o=>{if("development"!==process.env.NODE_ENV||e||console.log("[@koine/utils:storage] called 'remove' outside of browser does not work."),e)try{r("r",o)}catch(e){"development"===process.env.NODE_ENV&&console.warn("[@koine/utils:createStorage]: 'remove' error.",e)}},has:(o,t)=>{let s=t??!1;return"development"!==process.env.NODE_ENV||e||console.log(`[@koine/utils:storage] called 'has' outside of browser with default value '${JSON.stringify(t)}'.`),e&&(s=r("g",o)??!1),s}}};
|
package/createStorage.d.ts
CHANGED
package/createStorage.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { decode, encode, isBrowser, isNullOrUndefined, noop, } from "@koine/utils";
|
|
2
|
+
import { on } from "@koine/dom";
|
|
3
|
+
import { storage } from "./storage";
|
|
4
|
+
export let createStorage = (config, useSessionStorage) => {
|
|
5
|
+
const client = useSessionStorage ? storage.s : storage.l;
|
|
6
|
+
const keys = Object.keys(config).reduce((map, key) => ({ ...map, [key]: encode(key) }), {});
|
|
7
|
+
return {
|
|
8
|
+
get(key, defaultValue) {
|
|
9
|
+
return client.get(keys[key], decode, defaultValue);
|
|
10
|
+
},
|
|
11
|
+
getAll(defaultValues) {
|
|
12
|
+
if (!isBrowser) {
|
|
13
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
14
|
+
console.log(`[@koine/utils:createStorage] attempt to use 'getAll' outside of browser.`);
|
|
15
|
+
}
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
const all = {};
|
|
19
|
+
for (const key in keys) {
|
|
20
|
+
const value = this.get(key);
|
|
21
|
+
const defaultValue = defaultValues?.[key];
|
|
22
|
+
if (!isNullOrUndefined(value)) {
|
|
23
|
+
all[key] = value;
|
|
24
|
+
}
|
|
25
|
+
else if (defaultValue) {
|
|
26
|
+
all[key] = defaultValue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return all;
|
|
30
|
+
},
|
|
31
|
+
set(key, value) {
|
|
32
|
+
client.set(keys[key], value, encode);
|
|
33
|
+
},
|
|
34
|
+
setMany(newValues) {
|
|
35
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
36
|
+
if (!isBrowser) {
|
|
37
|
+
console.log(`[@koine/utils:createStorage] attempt to use 'setMany' outside of browser.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (isBrowser) {
|
|
41
|
+
for (const key in newValues) {
|
|
42
|
+
const value = newValues[key];
|
|
43
|
+
if (!isNullOrUndefined(value)) {
|
|
44
|
+
this.set(key, value);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.remove(key);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
has(key) {
|
|
53
|
+
return client.has(keys[key]);
|
|
54
|
+
},
|
|
55
|
+
remove(key) {
|
|
56
|
+
client.remove(keys[key]);
|
|
57
|
+
},
|
|
58
|
+
clear() {
|
|
59
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
60
|
+
if (!isBrowser) {
|
|
61
|
+
console.log(`[@koine/utils:createStorage] attempt to use 'clear' outside of browser.`);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (isBrowser) {
|
|
65
|
+
for (const key in keys) {
|
|
66
|
+
client.remove(keys[key]);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
watch: (keyToWatch, onRemoved, onAdded) => {
|
|
71
|
+
if (!isBrowser) {
|
|
72
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
73
|
+
console.log(`[@koine/utils:createStorage] attempt to use 'watch' outside of browser.`);
|
|
74
|
+
}
|
|
75
|
+
return noop;
|
|
76
|
+
}
|
|
77
|
+
const handler = (event) => {
|
|
78
|
+
const { key, oldValue, newValue } = event;
|
|
79
|
+
if (key === keys[keyToWatch]) {
|
|
80
|
+
if (oldValue && !newValue) {
|
|
81
|
+
onRemoved?.();
|
|
82
|
+
}
|
|
83
|
+
else if (!oldValue && newValue) {
|
|
84
|
+
onAdded?.();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
const listener = on(window, "storage", handler);
|
|
89
|
+
return listener;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
export default createStorage;
|
package/getZonedDate.d.ts
CHANGED
package/getZonedDate.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { isBrowser } from "@koine/utils";
|
|
2
|
+
const utcToZonedTime = (date, _tz) => {
|
|
3
|
+
return date;
|
|
4
|
+
};
|
|
5
|
+
export let getZonedDate = (dateString = "", timeZone) => {
|
|
6
|
+
if (!dateString.endsWith("Z"))
|
|
7
|
+
dateString += "Z";
|
|
8
|
+
if (!timeZone && isBrowser) {
|
|
9
|
+
try {
|
|
10
|
+
timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
14
|
+
console.warn("[@koine/browser:getZonedDate] failed reading timeZone, error", e);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return timeZone
|
|
19
|
+
? utcToZonedTime(new Date(dateString), timeZone)
|
|
20
|
+
: new Date(dateString);
|
|
21
|
+
};
|
|
22
|
+
export default getZonedDate;
|
package/gtag.d.ts
CHANGED
package/gtag.js
ADDED
package/gtagPageview.d.ts
CHANGED
package/gtagPageview.js
ADDED
package/index.cjs.js
CHANGED
|
@@ -9,37 +9,37 @@ let t$1={g:"getItem",s:"setItem",r:"removeItem"};let storageClient=s=>{let r=(o,
|
|
|
9
9
|
|
|
10
10
|
let storage={l:storageClient(),s:storageClient(!0)};
|
|
11
11
|
|
|
12
|
-
let createStorage=(n
|
|
12
|
+
let createStorage=(a,n)=>{let c=n?storage.s:storage.l,m=Object.keys(a).reduce((e,o)=>({...e,[o]:utils.encode(o)}),{});return {get:(t,o)=>c.get(m[t],utils.decode,o),getAll(e){if(!utils.isBrowser)return "development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'getAll' outside of browser."),{};let t={};for(let o in m){let s=this.get(o),l=e?.[o];utils.isNullOrUndefined(s)?l&&(t[o]=l):t[o]=s;}return t},set(e,o){c.set(m[e],o,utils.encode);},setMany(e){if("development"!==process.env.NODE_ENV||utils.isBrowser||console.log("[@koine/utils:createStorage] attempt to use 'setMany' outside of browser."),utils.isBrowser)for(let t in e){let o=e[t];utils.isNullOrUndefined(o)?this.remove(t):this.set(t,o);}},has:e=>c.has(m[e]),remove(e){c.remove(m[e]);},clear(){if("development"!==process.env.NODE_ENV||utils.isBrowser||console.log("[@koine/utils:createStorage] attempt to use 'clear' outside of browser."),utils.isBrowser)for(let e in m)c.remove(m[e]);},watch:(e,t,r)=>utils.isBrowser?dom.on(window,"storage",o=>{let{key:s,oldValue:l,newValue:i}=o;s===m[e]&&(l&&!i?t?.():!l&&i&&r?.());}):("development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'watch' outside of browser."),utils.noop)}};
|
|
13
13
|
|
|
14
14
|
let t=(e,t)=>e;let getZonedDate=(o="",n)=>{if(o.endsWith("Z")||(o+="Z"),!n&&utils.isBrowser)try{n=Intl.DateTimeFormat().resolvedOptions().timeZone;}catch(e){"development"===process.env.NODE_ENV&&console.warn("[@koine/browser:getZonedDate] failed reading timeZone, error",e);}return n?t(new Date(o)):new Date(o)};
|
|
15
15
|
|
|
16
|
-
let gtag=(...
|
|
16
|
+
let gtag=(...o)=>{utils.isUndefined(window)||utils.isUndefined(window.gtag)?utils.noop():window.gtag(...o);};
|
|
17
17
|
|
|
18
18
|
let gtagPageview=(...t)=>gtag("event","page_view",{page_path:t[0]||location.pathname,page_title:t[1]||document.title,page_location:t[2]||location.href});
|
|
19
19
|
|
|
20
|
-
let isIE=(
|
|
20
|
+
let isIE=(t=!0)=>{if(utils.isServer)return t;let i=window.navigator.userAgent;return !!(i.indexOf("MSIE ")>0||i.indexOf("Trident/")>0)};
|
|
21
21
|
|
|
22
22
|
let isMobile=(e=!0)=>utils.isServer?e:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent);
|
|
23
23
|
|
|
24
|
-
let
|
|
24
|
+
let r=(t,e,r)=>function(...o){if(r)return e(),t.apply(this,o);let i=t.apply(this,o);return e(),i},o=utils.isBrowser?location.search:"",i=()=>{let t=location.search;if(t!==o)for(let e of history.__.h.values())e(o,t);o=t;};let listenUrlSearch=t=>(history.__||(history.pushState=r(history.pushState,i),history.replaceState=r(history.replaceState,i),dom.on(window,"popstate",i),history.__={h:new Set}),history.__.h.has(t)||history.__.h.add(t),()=>{history.__.h.delete(t);});
|
|
25
25
|
|
|
26
|
-
let listenUrlSearchParams=(r,a)=>listenUrlSearch((e,t)=>{let l=new URLSearchParams(e),
|
|
26
|
+
let listenUrlSearchParams=(r,a)=>listenUrlSearch((e,t)=>{let l=new URLSearchParams(e),s=new URLSearchParams(t).get(r);l.get(r)!==s&&a(s);});
|
|
27
27
|
|
|
28
28
|
let navigateToUrl=(t="",e)=>{t&&history[e?"replaceState":"pushState"](history.state,"",t);};
|
|
29
29
|
|
|
30
|
-
let navigateToHash=(t="")=>{let{pathname:
|
|
30
|
+
let navigateToHash=(t="")=>{let{pathname:o,search:e}=location;navigateToUrl(o+(e?"?"+e:"")+(t?"#"+t:""),!0);};
|
|
31
31
|
|
|
32
|
-
let navigateToHashParams=(
|
|
32
|
+
let navigateToHashParams=(o={},e="")=>{let r=!e,i="#/"+utils.getUrlHashPathname(e=e||location.hash)+("string"==typeof o?o:utils.buildUrlQueryString(o));return r&&(location.hash=i),i};
|
|
33
33
|
|
|
34
|
-
let navigateToMergedHashParams=(
|
|
34
|
+
let navigateToMergedHashParams=(o={},t="")=>navigateToHashParams(utils.mergeUrlQueryParams(utils.getUrlHashParams(t),o),t);
|
|
35
35
|
|
|
36
|
-
let navigateToParams=(
|
|
36
|
+
let navigateToParams=(e={},r)=>{let i="string"==typeof e?e:utils.buildUrlQueryString(e);return utils.isBrowser&&navigateToUrl(location.pathname+i,r),i};
|
|
37
37
|
|
|
38
|
-
let navigateToMergedParams=(
|
|
38
|
+
let navigateToMergedParams=(o={},t)=>navigateToParams(utils.mergeUrlQueryParams(utils.getUrlQueryParams(),o),t);
|
|
39
39
|
|
|
40
|
-
let navigateWithoutUrlParam=(
|
|
40
|
+
let navigateWithoutUrlParam=(a,e)=>{let o={},i=utils.getUrlQueryParams();for(let t in i)t!==a&&(o[t]=i[t]);return navigateToParams(o,e)};
|
|
41
41
|
|
|
42
|
-
let redirectTo=(
|
|
42
|
+
let redirectTo=(t,o)=>{if(utils.isBrowser){let r=utils.buildUrlQueryString(o);location.href=t.replace(/\?+$/g,"")+r;}};
|
|
43
43
|
|
|
44
44
|
exports.createStorage = createStorage;
|
|
45
45
|
exports.getZonedDate = getZonedDate;
|
package/index.esm.js
CHANGED
|
@@ -5,36 +5,36 @@ let t$1={g:"getItem",s:"setItem",r:"removeItem"};let storageClient=s=>{let r=(o,
|
|
|
5
5
|
|
|
6
6
|
let storage={l:storageClient(),s:storageClient(!0)};
|
|
7
7
|
|
|
8
|
-
let createStorage=(n
|
|
8
|
+
let createStorage=(a,n)=>{let c=n?storage.s:storage.l,m=Object.keys(a).reduce((e,o)=>({...e,[o]:encode(o)}),{});return {get:(t,o)=>c.get(m[t],decode,o),getAll(e){if(!isBrowser)return "development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'getAll' outside of browser."),{};let t={};for(let o in m){let s=this.get(o),l=e?.[o];isNullOrUndefined(s)?l&&(t[o]=l):t[o]=s;}return t},set(e,o){c.set(m[e],o,encode);},setMany(e){if("development"!==process.env.NODE_ENV||isBrowser||console.log("[@koine/utils:createStorage] attempt to use 'setMany' outside of browser."),isBrowser)for(let t in e){let o=e[t];isNullOrUndefined(o)?this.remove(t):this.set(t,o);}},has:e=>c.has(m[e]),remove(e){c.remove(m[e]);},clear(){if("development"!==process.env.NODE_ENV||isBrowser||console.log("[@koine/utils:createStorage] attempt to use 'clear' outside of browser."),isBrowser)for(let e in m)c.remove(m[e]);},watch:(e,t,r)=>isBrowser?on(window,"storage",o=>{let{key:s,oldValue:l,newValue:i}=o;s===m[e]&&(l&&!i?t?.():!l&&i&&r?.());}):("development"===process.env.NODE_ENV&&console.log("[@koine/utils:createStorage] attempt to use 'watch' outside of browser."),noop)}};
|
|
9
9
|
|
|
10
10
|
let t=(e,t)=>e;let getZonedDate=(o="",n)=>{if(o.endsWith("Z")||(o+="Z"),!n&&isBrowser)try{n=Intl.DateTimeFormat().resolvedOptions().timeZone;}catch(e){"development"===process.env.NODE_ENV&&console.warn("[@koine/browser:getZonedDate] failed reading timeZone, error",e);}return n?t(new Date(o)):new Date(o)};
|
|
11
11
|
|
|
12
|
-
let gtag=(...
|
|
12
|
+
let gtag=(...o)=>{isUndefined(window)||isUndefined(window.gtag)?noop():window.gtag(...o);};
|
|
13
13
|
|
|
14
14
|
let gtagPageview=(...t)=>gtag("event","page_view",{page_path:t[0]||location.pathname,page_title:t[1]||document.title,page_location:t[2]||location.href});
|
|
15
15
|
|
|
16
|
-
let isIE=(
|
|
16
|
+
let isIE=(t=!0)=>{if(isServer)return t;let i=window.navigator.userAgent;return !!(i.indexOf("MSIE ")>0||i.indexOf("Trident/")>0)};
|
|
17
17
|
|
|
18
18
|
let isMobile=(e=!0)=>isServer?e:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(window.navigator.userAgent);
|
|
19
19
|
|
|
20
|
-
let
|
|
20
|
+
let r=(t,e,r)=>function(...o){if(r)return e(),t.apply(this,o);let i=t.apply(this,o);return e(),i},o=isBrowser?location.search:"",i=()=>{let t=location.search;if(t!==o)for(let e of history.__.h.values())e(o,t);o=t;};let listenUrlSearch=t=>(history.__||(history.pushState=r(history.pushState,i),history.replaceState=r(history.replaceState,i),on(window,"popstate",i),history.__={h:new Set}),history.__.h.has(t)||history.__.h.add(t),()=>{history.__.h.delete(t);});
|
|
21
21
|
|
|
22
|
-
let listenUrlSearchParams=(r,a)=>listenUrlSearch((e,t)=>{let l=new URLSearchParams(e),
|
|
22
|
+
let listenUrlSearchParams=(r,a)=>listenUrlSearch((e,t)=>{let l=new URLSearchParams(e),s=new URLSearchParams(t).get(r);l.get(r)!==s&&a(s);});
|
|
23
23
|
|
|
24
24
|
let navigateToUrl=(t="",e)=>{t&&history[e?"replaceState":"pushState"](history.state,"",t);};
|
|
25
25
|
|
|
26
|
-
let navigateToHash=(t="")=>{let{pathname:
|
|
26
|
+
let navigateToHash=(t="")=>{let{pathname:o,search:e}=location;navigateToUrl(o+(e?"?"+e:"")+(t?"#"+t:""),!0);};
|
|
27
27
|
|
|
28
|
-
let navigateToHashParams=(
|
|
28
|
+
let navigateToHashParams=(o={},e="")=>{let r=!e,i="#/"+getUrlHashPathname(e=e||location.hash)+("string"==typeof o?o:buildUrlQueryString(o));return r&&(location.hash=i),i};
|
|
29
29
|
|
|
30
|
-
let navigateToMergedHashParams=(
|
|
30
|
+
let navigateToMergedHashParams=(o={},t="")=>navigateToHashParams(mergeUrlQueryParams(getUrlHashParams(t),o),t);
|
|
31
31
|
|
|
32
|
-
let navigateToParams=(
|
|
32
|
+
let navigateToParams=(e={},r)=>{let i="string"==typeof e?e:buildUrlQueryString(e);return isBrowser&&navigateToUrl(location.pathname+i,r),i};
|
|
33
33
|
|
|
34
|
-
let navigateToMergedParams=(
|
|
34
|
+
let navigateToMergedParams=(o={},t)=>navigateToParams(mergeUrlQueryParams(getUrlQueryParams(),o),t);
|
|
35
35
|
|
|
36
|
-
let navigateWithoutUrlParam=(
|
|
36
|
+
let navigateWithoutUrlParam=(a,e)=>{let o={},i=getUrlQueryParams();for(let t in i)t!==a&&(o[t]=i[t]);return navigateToParams(o,e)};
|
|
37
37
|
|
|
38
|
-
let redirectTo=(
|
|
38
|
+
let redirectTo=(t,o)=>{if(isBrowser){let r=buildUrlQueryString(o);location.href=t.replace(/\?+$/g,"")+r;}};
|
|
39
39
|
|
|
40
40
|
export { createStorage, getZonedDate, gtag, gtagPageview, isIE, isMobile, listenUrlSearch, listenUrlSearchParams, navigateToHash, navigateToHashParams, navigateToMergedHashParams, navigateToMergedParams, navigateToParams, navigateToUrl, navigateWithoutUrlParam, redirectTo, storage, storageClient };
|
package/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { createStorage } from "./createStorage";
|
|
2
|
+
export { getZonedDate } from "./getZonedDate";
|
|
3
|
+
export { gtag } from "./gtag";
|
|
4
|
+
export { gtagPageview } from "./gtagPageview";
|
|
5
|
+
export { isIE } from "./isIE";
|
|
6
|
+
export { isMobile } from "./isMobile";
|
|
7
|
+
export { listenUrlSearch } from "./listenUrlSearch";
|
|
8
|
+
export { listenUrlSearchParams } from "./listenUrlSearchParams";
|
|
9
|
+
export { navigateToHash } from "./navigateToHash";
|
|
10
|
+
export { navigateToHashParams } from "./navigateToHashParams";
|
|
11
|
+
export { navigateToMergedHashParams } from "./navigateToMergedHashParams";
|
|
12
|
+
export { navigateToMergedParams } from "./navigateToMergedParams";
|
|
13
|
+
export { navigateToParams } from "./navigateToParams";
|
|
14
|
+
export { navigateToUrl } from "./navigateToUrl";
|
|
15
|
+
export { navigateWithoutUrlParam } from "./navigateWithoutUrlParam";
|
|
16
|
+
export { redirectTo } from "./redirectTo";
|
|
17
|
+
export { storage } from "./storage";
|
|
18
|
+
export { storageClient } from "./storageClient";
|
package/isIE.d.ts
CHANGED
package/isIE.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { isServer } from "@koine/utils";
|
|
2
|
+
export let isIE = (ssrValue = true) => {
|
|
3
|
+
if (isServer) {
|
|
4
|
+
return ssrValue;
|
|
5
|
+
}
|
|
6
|
+
const ua = window.navigator.userAgent;
|
|
7
|
+
if (ua.indexOf("MSIE ") > 0 || ua.indexOf("Trident/") > 0) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
};
|
|
12
|
+
export default isIE;
|
package/isMobile.d.ts
CHANGED
package/isMobile.js
ADDED
package/listenUrlSearch.d.ts
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { isBrowser } from "@koine/utils";
|
|
2
|
+
import { on } from "@koine/dom";
|
|
3
|
+
let extendHistoryMethod = (fn, runHandlers, before) => {
|
|
4
|
+
return function interceptor(...args) {
|
|
5
|
+
if (before) {
|
|
6
|
+
runHandlers();
|
|
7
|
+
return fn.apply(this, args);
|
|
8
|
+
}
|
|
9
|
+
const result = fn.apply(this, args);
|
|
10
|
+
runHandlers();
|
|
11
|
+
return result;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
let prevSearch = isBrowser ? location.search : "";
|
|
15
|
+
let runHandlers = () => {
|
|
16
|
+
const newSearch = location.search;
|
|
17
|
+
if (newSearch !== prevSearch) {
|
|
18
|
+
const listeners = history.__.h.values();
|
|
19
|
+
for (const listener of listeners) {
|
|
20
|
+
listener(prevSearch, newSearch);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
prevSearch = newSearch;
|
|
24
|
+
};
|
|
25
|
+
export let listenUrlSearch = (handler) => {
|
|
26
|
+
if (!history.__) {
|
|
27
|
+
history.pushState = extendHistoryMethod(history.pushState, runHandlers);
|
|
28
|
+
history.replaceState = extendHistoryMethod(history.replaceState, runHandlers);
|
|
29
|
+
on(window, "popstate", runHandlers);
|
|
30
|
+
history.__ = { h: new Set() };
|
|
31
|
+
}
|
|
32
|
+
if (!history.__.h.has(handler)) {
|
|
33
|
+
history.__.h.add(handler);
|
|
34
|
+
}
|
|
35
|
+
return () => {
|
|
36
|
+
history.__.h.delete(handler);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export default listenUrlSearch;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { listenUrlSearch } from "./listenUrlSearch";
|
|
2
|
+
export let listenUrlSearchParams = (paramName, handler) => listenUrlSearch((prevSearch, newSearch) => {
|
|
3
|
+
const prevParams = new URLSearchParams(prevSearch);
|
|
4
|
+
const newParams = new URLSearchParams(newSearch);
|
|
5
|
+
const newValue = newParams.get(paramName);
|
|
6
|
+
if (prevParams.get(paramName) !== newValue) {
|
|
7
|
+
handler(newValue);
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
export default listenUrlSearchParams;
|
package/navigateToHash.d.ts
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { buildUrlQueryString, getUrlHashPathname, } from "@koine/utils";
|
|
2
|
+
export let navigateToHashParams = (params = {}, hash = "") => {
|
|
3
|
+
const useLocation = !hash;
|
|
4
|
+
hash = hash || location.hash;
|
|
5
|
+
const hashQueryLess = getUrlHashPathname(hash);
|
|
6
|
+
const queryString = typeof params === "string" ? params : buildUrlQueryString(params);
|
|
7
|
+
const newHash = "#/" + hashQueryLess + queryString;
|
|
8
|
+
if (useLocation) {
|
|
9
|
+
location.hash = newHash;
|
|
10
|
+
}
|
|
11
|
+
return newHash;
|
|
12
|
+
};
|
|
13
|
+
export default navigateToHashParams;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { getUrlHashParams, mergeUrlQueryParams, } from "@koine/utils";
|
|
2
|
+
import { navigateToHashParams } from "./navigateToHashParams";
|
|
3
|
+
export let navigateToMergedHashParams = (params = {}, hash = "") => navigateToHashParams(mergeUrlQueryParams(getUrlHashParams(hash), params), hash);
|
|
4
|
+
export default navigateToMergedHashParams;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { getUrlQueryParams, mergeUrlQueryParams, } from "@koine/utils";
|
|
2
|
+
import { navigateToParams } from "./navigateToParams";
|
|
3
|
+
export let navigateToMergedParams = (params = {}, replace) => navigateToParams(mergeUrlQueryParams(getUrlQueryParams(), params), replace);
|
|
4
|
+
export default navigateToMergedParams;
|
package/navigateToParams.d.ts
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { buildUrlQueryString, isBrowser, } from "@koine/utils";
|
|
2
|
+
import { navigateToUrl } from "./navigateToUrl";
|
|
3
|
+
export let navigateToParams = (params = {}, replace) => {
|
|
4
|
+
const queryString = typeof params === "string" ? params : buildUrlQueryString(params);
|
|
5
|
+
if (isBrowser) {
|
|
6
|
+
navigateToUrl(location.pathname + queryString, replace);
|
|
7
|
+
}
|
|
8
|
+
return queryString;
|
|
9
|
+
};
|
|
10
|
+
export default navigateToParams;
|
package/navigateToUrl.d.ts
CHANGED
package/navigateToUrl.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { getUrlQueryParams } from "@koine/utils";
|
|
2
|
+
import { navigateToParams } from "./navigateToParams";
|
|
3
|
+
export let navigateWithoutUrlParam = (paramName, replace) => {
|
|
4
|
+
const params = {};
|
|
5
|
+
const currentParams = getUrlQueryParams();
|
|
6
|
+
for (const key in currentParams) {
|
|
7
|
+
if (key !== paramName) {
|
|
8
|
+
params[key] = currentParams[key];
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return navigateToParams(params, replace);
|
|
12
|
+
};
|
|
13
|
+
export default navigateWithoutUrlParam;
|
package/package.json
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
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.74",
|
|
6
|
+
"@koine/utils": "2.0.0-beta.74"
|
|
7
7
|
},
|
|
8
8
|
"peerDependenciesMeta": {
|
|
9
9
|
"date-fns-tz": {
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
},
|
|
21
21
|
"module": "./index.esm.js",
|
|
22
22
|
"main": "./index.cjs.js",
|
|
23
|
-
"version": "2.0.0-beta.
|
|
23
|
+
"version": "2.0.0-beta.74"
|
|
24
24
|
}
|
package/redirectTo.d.ts
CHANGED
package/redirectTo.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { buildUrlQueryString, isBrowser, } from "@koine/utils";
|
|
2
|
+
export let redirectTo = (url, params) => {
|
|
3
|
+
if (isBrowser) {
|
|
4
|
+
const queryString = buildUrlQueryString(params);
|
|
5
|
+
location.href = url.replace(/\?+$/g, "") + queryString;
|
|
6
|
+
}
|
|
7
|
+
};
|
|
8
|
+
export default redirectTo;
|
package/storage.d.ts
CHANGED
package/storage.js
ADDED
package/storageClient.d.ts
CHANGED
|
@@ -5,3 +5,4 @@ export declare let storageClient: <TConfig extends StorageClientConfig = Storage
|
|
|
5
5
|
remove: <TKey_2 extends Extract<keyof TConfig, string>>(key: TKey_2) => void;
|
|
6
6
|
has: <TKey_3 extends Extract<keyof TConfig, string>, TValue_2 = TConfig[TKey_3]>(key: TKey_3, defaultValue?: TValue_2 | undefined) => boolean | NonNullable<TValue_2>;
|
|
7
7
|
};
|
|
8
|
+
export default storageClient;
|
package/storageClient.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { isBrowser, isString } from "@koine/utils";
|
|
2
|
+
const methodsMap = { g: "getItem", s: "setItem", r: "removeItem" };
|
|
3
|
+
export let storageClient = (useSessionStorage) => {
|
|
4
|
+
const nativeMethod = (method, key, value) => isBrowser
|
|
5
|
+
? window[useSessionStorage ? "sessionStorage" : "localStorage"][methodsMap[method]](key, value)
|
|
6
|
+
: () => {
|
|
7
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
8
|
+
console.warn(`[@koine/utils:storageClient]: ${useSessionStorage ? "sessionStorage" : "localStorage"} does not exists outside of browser.`);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const get = (key, transform, defaultValue) => {
|
|
12
|
+
let value = defaultValue ?? null;
|
|
13
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
14
|
+
if (!isBrowser) {
|
|
15
|
+
console.log(`[@koine/utils:storage] called 'get' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
if (isBrowser) {
|
|
19
|
+
let stored = nativeMethod("g", key);
|
|
20
|
+
if (stored) {
|
|
21
|
+
stored = transform ? transform(stored) : stored;
|
|
22
|
+
try {
|
|
23
|
+
const parsed = JSON.parse(stored);
|
|
24
|
+
if (parsed)
|
|
25
|
+
value = parsed;
|
|
26
|
+
}
|
|
27
|
+
catch (_e) {
|
|
28
|
+
value = stored;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return value;
|
|
33
|
+
};
|
|
34
|
+
const set = (key, value, transform = (value) => value) => {
|
|
35
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
36
|
+
if (!isBrowser) {
|
|
37
|
+
console.log(`[@koine/utils:storage] called 'set' outside of browser does not work.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (isBrowser) {
|
|
41
|
+
try {
|
|
42
|
+
const transformedValue = isString(value)
|
|
43
|
+
? transform(value)
|
|
44
|
+
: transform(JSON.stringify(value));
|
|
45
|
+
nativeMethod("s", key, transformedValue);
|
|
46
|
+
}
|
|
47
|
+
catch (_e) {
|
|
48
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
49
|
+
console.warn(`[@koine/utils:createStorage]: 'set' error.`, _e);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const remove = (key) => {
|
|
55
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
56
|
+
if (!isBrowser) {
|
|
57
|
+
console.log(`[@koine/utils:storage] called 'remove' outside of browser does not work.`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (isBrowser) {
|
|
61
|
+
try {
|
|
62
|
+
nativeMethod("r", key);
|
|
63
|
+
}
|
|
64
|
+
catch (_e) {
|
|
65
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
66
|
+
console.warn(`[@koine/utils:createStorage]: 'remove' error.`, _e);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const has = (key, defaultValue) => {
|
|
72
|
+
let value = defaultValue ?? false;
|
|
73
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
74
|
+
if (!isBrowser) {
|
|
75
|
+
console.log(`[@koine/utils:storage] called 'has' outside of browser with default value '${JSON.stringify(defaultValue)}'.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (isBrowser) {
|
|
79
|
+
const stored = nativeMethod("g", key);
|
|
80
|
+
value = stored ?? false;
|
|
81
|
+
}
|
|
82
|
+
return value;
|
|
83
|
+
};
|
|
84
|
+
return {
|
|
85
|
+
get,
|
|
86
|
+
set,
|
|
87
|
+
remove,
|
|
88
|
+
has,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export default storageClient;
|