@ezuikit/utils-tools 1.0.0-alpha.0 → 1.0.0-alpha.2
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 -42
- package/dist/index.esm.js +1 -0
- package/dist/index.js +1 -0
- package/dist/index.umd.js +1 -146
- package/dist/types/ezopenUrl.d.ts +50 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/isHttp.d.ts +1 -0
- package/dist/types/isMobile.d.ts +5 -0
- package/dist/types/pick.d.ts +13 -0
- package/dist/types/query.d.ts +1 -0
- package/package.json +1 -1
- package/dist/index.umd.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,42 +1 @@
|
|
|
1
|
-
##
|
|
2
|
-
|
|
3
|
-
日志工具类
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## scripts
|
|
7
|
-
|
|
8
|
-
```bash
|
|
9
|
-
pnpm run dev
|
|
10
|
-
|
|
11
|
-
pnpm run build
|
|
12
|
-
|
|
13
|
-
pnpm run test
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## 使用
|
|
17
|
-
|
|
18
|
-
```bash
|
|
19
|
-
pnpm install @ezuikit/utils-logger
|
|
20
|
-
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
```ts
|
|
24
|
-
import Logger from '@ezuikit/utils-logger'
|
|
25
|
-
|
|
26
|
-
const logger = new Logger({level: "INFO"})
|
|
27
|
-
|
|
28
|
-
logger.info("info")
|
|
29
|
-
logger.log("log")
|
|
30
|
-
logger.warn("warn")
|
|
31
|
-
logger.error("error")
|
|
32
|
-
|
|
33
|
-
// 更改日志等级 WARN 只打印 warn error
|
|
34
|
-
logger.setOptions({level: "WARN"})
|
|
35
|
-
|
|
36
|
-
logger.info("setOptions info")
|
|
37
|
-
logger.log("setOptions log")
|
|
38
|
-
logger.warn("setOptions warn")
|
|
39
|
-
logger.error("setOptions error")
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
## 工具
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=function(e){var n=e.split("?")[1],r={};if(n)for(var i=n.split("&"),t=0;t<i.length;t++){var l=i[t].split("=");r[l[0]]=decodeURIComponent(l[1])}return r};function n(n){var r={};if(/^ezopen:\/\//.test(n)){if(n.includes("@")){var i=n.indexOf("@"),t=n.indexOf("//");r.validateCode=n.substring(t+2,i),n=n.replace(r.validateCode+"@","")}r.protocol=n.split("//")[0],r.search=n.split("?")[1]?"?"+n.split("?")[1]:"",r.hostname=n.split("/")[2],r.origin=r.protocol+"//"+r.hostname,r.pathname=n.split("?")[0].replace(r.origin,""),r.href=n;var l=r.pathname.split("/"),o=l[2].split(".");return r.deviceSerial=l[1],r.channelNo=o[0],r.type=o[o.length-1],"live"===r.type&&(r.definition=o.length>2?o[1]:"sd"),"rec"===r.type&&(r.recType=o.length>2?o[1]:""),r.searchParams=e(n),r}return{}}function r(r,i){var t=null!=i?i:{},l=t.type,o=t.channelNo,a=t.recType,c=t.definition,s=t.deviceSerial,p=(null!=i?i:{}).search;if(l||o||a||c||p){var u=n(r);if(p){var d=Object.assign({},u.searchParams,e("?"+p.replace("?","")));p=Object.entries(d).reduce((function(e,n){var r=n[0],i=n[1];return e+=r+"="+encodeURIComponent(i)+"&"}),"?").replace(/&$/,"")}else p=u.search;return u.origin+"/"+(null!=s?s:u.deviceSerial)+"/"+(null!=o?o:u.channelNo)+("rec"===l&&a?"."+a:"")+("live"===l&&"hd"===c?"."+c:"")+"."+(null!=l?l:u.type)+p}return r}function i(e){return/^http[s]?:\/\//.test(e)}function t(e){var n,r;return!!((null!=e?e:null==(r=window)||null==(n=r.navigator)?void 0:n.userAgent)||"").match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)}function l(e,n){return Object.entries(e).reduce((function(e,r){var i=r[0],t=r[1];return n.includes(i)&&(e[i]=t),e}),{})}export{e as getQuery,i as isHttp,t as isMobile,n as parseEzopenUrl,l as pick,r as switchEzopenUrl};
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=function(e){var r=e.split("?")[1],n={};if(r)for(var t=r.split("&"),i=0;i<t.length;i++){var o=t[i].split("=");n[o[0]]=decodeURIComponent(o[1])}return n};function r(r){var n={};if(/^ezopen:\/\//.test(r)){if(r.includes("@")){var t=r.indexOf("@"),i=r.indexOf("//");n.validateCode=r.substring(i+2,t),r=r.replace(n.validateCode+"@","")}n.protocol=r.split("//")[0],n.search=r.split("?")[1]?"?"+r.split("?")[1]:"",n.hostname=r.split("/")[2],n.origin=n.protocol+"//"+n.hostname,n.pathname=r.split("?")[0].replace(n.origin,""),n.href=r;var o=n.pathname.split("/"),l=o[2].split(".");return n.deviceSerial=o[1],n.channelNo=l[0],n.type=l[l.length-1],"live"===n.type&&(n.definition=l.length>2?l[1]:"sd"),"rec"===n.type&&(n.recType=l.length>2?l[1]:""),n.searchParams=e(r),n}return{}}exports.getQuery=e,exports.isHttp=function(e){return/^http[s]?:\/\//.test(e)},exports.isMobile=function(e){var r,n;return!!((null!=e?e:null==(n=window)||null==(r=n.navigator)?void 0:r.userAgent)||"").match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)},exports.parseEzopenUrl=r,exports.pick=function(e,r){return Object.entries(e).reduce((function(e,n){var t=n[0],i=n[1];return r.includes(t)&&(e[t]=i),e}),{})},exports.switchEzopenUrl=function(n,t){var i=null!=t?t:{},o=i.type,l=i.channelNo,a=i.recType,s=i.definition,c=i.deviceSerial,p=(null!=t?t:{}).search;if(o||l||a||s||p){var u=r(n);if(p){var d=Object.assign({},u.searchParams,e("?"+p.replace("?","")));p=Object.entries(d).reduce((function(e,r){var n=r[0],t=r[1];return e+=n+"="+encodeURIComponent(t)+"&"}),"?").replace(/&$/,"")}else p=u.search;return u.origin+"/"+(null!=c?c:u.deviceSerial)+"/"+(null!=l?l:u.channelNo)+("rec"===o&&a?"."+a:"")+("live"===o&&"hd"===s?"."+s:"")+"."+(null!=o?o:u.type)+p}return n};
|
package/dist/index.umd.js
CHANGED
|
@@ -1,146 +1 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
* index.umd.js.js v1.0.0-alpha.0
|
|
4
|
-
* Copyright (c) 2023-10-28 Ezviz-OpenBiz
|
|
5
|
-
* Released under MIT the License.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
(function (global, factory) {
|
|
9
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
10
|
-
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
11
|
-
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Tools = {}));
|
|
12
|
-
})(this, (function (exports) { 'use strict';
|
|
13
|
-
|
|
14
|
-
const getQuery = (url)=>{
|
|
15
|
-
const query = url.split('?')[1]; // https://open.ys7.com/help?a=1&b=2&c=3
|
|
16
|
-
const obj = {};
|
|
17
|
-
if (query) {
|
|
18
|
-
// 把查询字符串按照&符号分割成数组
|
|
19
|
-
const vars = query.split('&'); // ['a=2', 'b=4']
|
|
20
|
-
for(let i = 0; i < vars.length; i++){
|
|
21
|
-
const pair = vars[i].split('=');
|
|
22
|
-
// 暂时不支持数组
|
|
23
|
-
obj[pair[0]] = decodeURIComponent(pair[1]);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
return obj; // {a: '1', b: '2', c:'3'}
|
|
27
|
-
}; // export const appendQuery () {}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @description 解析ezopen 协议 url
|
|
31
|
-
* @param {string} url ezopen url
|
|
32
|
-
* @returns {EzopenParams}
|
|
33
|
-
*
|
|
34
|
-
* ```ts
|
|
35
|
-
* parseEzopenUrl("ezopen://open.ys7.com/C116331000/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A")
|
|
36
|
-
* ```
|
|
37
|
-
*/ function parseEzopenUrl(url) {
|
|
38
|
-
const obj = {};
|
|
39
|
-
if (/^ezopen:\/\//.test(url)) {
|
|
40
|
-
obj.protocol = url.split('//')[0];
|
|
41
|
-
obj.search = url.split('?')[1] ? '?' + url.split('?')[1] : '';
|
|
42
|
-
obj.hostname = url.split('/')[2];
|
|
43
|
-
obj.origin = obj.protocol + '//' + obj.hostname;
|
|
44
|
-
obj.pathname = url.split('?')[0].replace(obj.origin, '');
|
|
45
|
-
obj.href = url;
|
|
46
|
-
const pathnames = obj.pathname.split('/');
|
|
47
|
-
const lastPath = pathnames[2].split('.');
|
|
48
|
-
obj.deviceSerial = pathnames[1];
|
|
49
|
-
obj.channelNo = lastPath[0];
|
|
50
|
-
obj.type = lastPath[lastPath.length - 1];
|
|
51
|
-
if (obj.type === 'live') {
|
|
52
|
-
obj.definition = lastPath.length > 2 ? lastPath[1] : 'sd';
|
|
53
|
-
}
|
|
54
|
-
if (obj.type === 'rec') {
|
|
55
|
-
obj.recType = lastPath.length > 2 ? lastPath[1] : '';
|
|
56
|
-
}
|
|
57
|
-
obj.searchParams = getQuery(url);
|
|
58
|
-
return obj;
|
|
59
|
-
}
|
|
60
|
-
return {};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* @description exopen 协议播放地址切换
|
|
64
|
-
* @param {string} url exopen 协议播放地址
|
|
65
|
-
* @param {SwitchEzpoenOptions} options
|
|
66
|
-
* @returns
|
|
67
|
-
*
|
|
68
|
-
* @example
|
|
69
|
-
* ```ts
|
|
70
|
-
* switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live?a=1', {type: 'rec',recType: 'cloud',search: 'b=23&c=123423&a=00000&c=你好啊',definition: 'hd'}) // -> ezopen://open.ys7.com/C11633138/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A
|
|
71
|
-
*
|
|
72
|
-
* switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live', {type: 'live',recType: 'cloud',search: 'b=23&c=123423', definition: 'sd'}) // -> ezopen://open.ys7.com/C11633138/1.live?b=23&c=123423
|
|
73
|
-
* ```
|
|
74
|
-
*/ function switchEzopenUrl(url, options) {
|
|
75
|
-
const { type, channelNo, recType, definition, deviceSerial } = options != null ? options : {};
|
|
76
|
-
let { search } = options != null ? options : {};
|
|
77
|
-
if (!!type || !!channelNo || !!recType || !!definition || !!search) {
|
|
78
|
-
const obj = parseEzopenUrl(url);
|
|
79
|
-
if (search) {
|
|
80
|
-
const ns = Object.assign({}, obj.searchParams, getQuery('?' + search.replace('?', '')));
|
|
81
|
-
search = Object.entries(ns).reduce((acc, [key, value])=>{
|
|
82
|
-
acc += `${key}=${encodeURIComponent(value)}&`;
|
|
83
|
-
return acc;
|
|
84
|
-
}, '?').replace(/&$/, '');
|
|
85
|
-
} else {
|
|
86
|
-
search = obj.search;
|
|
87
|
-
}
|
|
88
|
-
return `${obj.origin}/${deviceSerial != null ? deviceSerial : obj.deviceSerial}/${channelNo != null ? channelNo : obj.channelNo}${type === 'rec' && recType ? '.' + recType : ''}${type === 'live' && definition === 'hd' ? '.' + definition : ''}.${type != null ? type : obj.type}${search}`;
|
|
89
|
-
}
|
|
90
|
-
return url;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function isHttp(url) {
|
|
94
|
-
return /^http[s]?:\/\//.test(url);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* @description 判断是不是移动端(包括pad)
|
|
99
|
-
* @returns {boolean}
|
|
100
|
-
*/ function isMobile(agent) {
|
|
101
|
-
var _window_navigator, _window;
|
|
102
|
-
return !!((agent != null ? agent : (_window = window) == null ? void 0 : (_window_navigator = _window.navigator) == null ? void 0 : _window_navigator.userAgent) || '').match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* @description 从对象中挑选值
|
|
107
|
-
* @param obj
|
|
108
|
-
* @param keys
|
|
109
|
-
* @returns
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
*
|
|
113
|
-
* ```ts
|
|
114
|
-
* pick({a: "1", b: "b"}, ['a']) // => {a: 'a'}
|
|
115
|
-
* ```
|
|
116
|
-
*/ function pick(obj, keys) {
|
|
117
|
-
return Object.entries(obj).reduce((acc, [key, value])=>{
|
|
118
|
-
if (keys.includes(key)) {
|
|
119
|
-
acc[key] = value;
|
|
120
|
-
}
|
|
121
|
-
return acc;
|
|
122
|
-
}, {});
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
console.log(switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live?a=1', {
|
|
126
|
-
type: 'rec',
|
|
127
|
-
recType: 'cloud',
|
|
128
|
-
search: 'b=23&c=123423&a=00000&c=你好啊',
|
|
129
|
-
definition: 'hd'
|
|
130
|
-
}));
|
|
131
|
-
console.log(switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live', {
|
|
132
|
-
type: 'live',
|
|
133
|
-
recType: 'cloud',
|
|
134
|
-
search: 'b=23&c=123423',
|
|
135
|
-
definition: 'sd'
|
|
136
|
-
}));
|
|
137
|
-
|
|
138
|
-
exports.getQuery = getQuery;
|
|
139
|
-
exports.isHttp = isHttp;
|
|
140
|
-
exports.isMobile = isMobile;
|
|
141
|
-
exports.parseEzopenUrl = parseEzopenUrl;
|
|
142
|
-
exports.pick = pick;
|
|
143
|
-
exports.switchEzopenUrl = switchEzopenUrl;
|
|
144
|
-
|
|
145
|
-
}));
|
|
146
|
-
//# sourceMappingURL=index.umd.js.map
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e="undefined"!=typeof globalThis?globalThis:e||self).Tools={})}(this,(function(e){"use strict";var n=function(e){var n=e.split("?")[1],i={};if(n)for(var r=n.split("&"),t=0;t<r.length;t++){var o=r[t].split("=");i[o[0]]=decodeURIComponent(o[1])}return i};function i(e){var i={};if(/^ezopen:\/\//.test(e)){if(e.includes("@")){var r=e.indexOf("@"),t=e.indexOf("//");i.validateCode=e.substring(t+2,r),e=e.replace(i.validateCode+"@","")}i.protocol=e.split("//")[0],i.search=e.split("?")[1]?"?"+e.split("?")[1]:"",i.hostname=e.split("/")[2],i.origin=i.protocol+"//"+i.hostname,i.pathname=e.split("?")[0].replace(i.origin,""),i.href=e;var o=i.pathname.split("/"),l=o[2].split(".");return i.deviceSerial=o[1],i.channelNo=l[0],i.type=l[l.length-1],"live"===i.type&&(i.definition=l.length>2?l[1]:"sd"),"rec"===i.type&&(i.recType=l.length>2?l[1]:""),i.searchParams=n(e),i}return{}}e.getQuery=n,e.isHttp=function(e){return/^http[s]?:\/\//.test(e)},e.isMobile=function(e){var n,i;return!!((null!=e?e:null==(i=window)||null==(n=i.navigator)?void 0:n.userAgent)||"").match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)},e.parseEzopenUrl=i,e.pick=function(e,n){return Object.entries(e).reduce((function(e,i){var r=i[0],t=i[1];return n.includes(r)&&(e[r]=t),e}),{})},e.switchEzopenUrl=function(e,r){var t=null!=r?r:{},o=t.type,l=t.channelNo,a=t.recType,s=t.definition,c=t.deviceSerial,p=(null!=r?r:{}).search;if(o||l||a||s||p){var u=i(e);if(p){var d=Object.assign({},u.searchParams,n("?"+p.replace("?","")));p=Object.entries(d).reduce((function(e,n){var i=n[0],r=n[1];return e+=i+"="+encodeURIComponent(r)+"&"}),"?").replace(/&$/,"")}else p=u.search;return u.origin+"/"+(null!=c?c:u.deviceSerial)+"/"+(null!=l?l:u.channelNo)+("rec"===o&&a?"."+a:"")+("live"===o&&"hd"===s?"."+s:"")+"."+(null!=o?o:u.type)+p}return e}}));
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export interface EzopenURL {
|
|
2
|
+
protocol: string;
|
|
3
|
+
search?: string;
|
|
4
|
+
searchParams?: Record<string, any>;
|
|
5
|
+
pathname: string;
|
|
6
|
+
origin: string;
|
|
7
|
+
href: string;
|
|
8
|
+
hostname: string;
|
|
9
|
+
deviceSerial: string;
|
|
10
|
+
channelNo: string;
|
|
11
|
+
validateCode?: string;
|
|
12
|
+
/** 播放类型 直播 | 回放 */
|
|
13
|
+
type: 'live' | 'rec' | string;
|
|
14
|
+
/** 回放存储类型 */
|
|
15
|
+
recType?: 'cloud' | string;
|
|
16
|
+
/** 清晰度 */
|
|
17
|
+
definition?: 'sd' | 'hd';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @description 解析ezopen 协议 url
|
|
21
|
+
* @param {string} url ezopen url
|
|
22
|
+
* @returns {EzopenParams}
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* parseEzopenUrl("ezopen://open.ys7.com/C116331000/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A")
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseEzopenUrl(url: string): Partial<EzopenURL>;
|
|
29
|
+
export interface SwitchEzpoenOptions {
|
|
30
|
+
deviceSerial?: string;
|
|
31
|
+
channelNo?: string;
|
|
32
|
+
type?: 'live' | 'rec';
|
|
33
|
+
recType?: 'cloud';
|
|
34
|
+
definition?: 'hd' | 'sd';
|
|
35
|
+
search?: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @description exopen 协议播放地址切换
|
|
39
|
+
* @param {string} url exopen 协议播放地址
|
|
40
|
+
* @param {SwitchEzpoenOptions} options
|
|
41
|
+
* @returns
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live?a=1', {type: 'rec',recType: 'cloud',search: 'b=23&c=123423&a=00000&c=你好啊',definition: 'hd'}) // -> ezopen://open.ys7.com/C11633138/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A
|
|
46
|
+
*
|
|
47
|
+
* switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live', {type: 'live',recType: 'cloud',search: 'b=23&c=123423', definition: 'sd'}) // -> ezopen://open.ys7.com/C11633138/1.live?b=23&c=123423
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function switchEzopenUrl(url: string, options?: SwitchEzpoenOptions): string;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { parseEzopenUrl, switchEzopenUrl } from './ezopenUrl';
|
|
2
|
+
import { isHttp } from './isHttp';
|
|
3
|
+
import { isMobile } from './isMobile';
|
|
4
|
+
import { getQuery } from './query';
|
|
5
|
+
import { pick } from './pick';
|
|
6
|
+
export { parseEzopenUrl, switchEzopenUrl, isHttp, isMobile, getQuery, pick };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isHttp(url: string): boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getQuery: (url: string) => Record<string, any>;
|
package/package.json
CHANGED
package/dist/index.umd.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../src/query.ts","../src/ezopenUrl.ts","../src/isHttp.ts","../src/isMobile.ts","../src/pick.ts","../src/index.ts"],"sourcesContent":["export const getQuery = (url: string) => {\r\n const query = url.split('?')[1]; // https://open.ys7.com/help?a=1&b=2&c=3\r\n const obj: Record<string, any> = {};\r\n\r\n if (query) {\r\n // 把查询字符串按照&符号分割成数组\r\n const vars = query.split('&'); // ['a=2', 'b=4']\r\n\r\n for (let i = 0; i < vars.length; i++) {\r\n const pair = vars[i].split('=');\r\n // 暂时不支持数组\r\n obj[pair[0]] = decodeURIComponent(pair[1]);\r\n }\r\n }\r\n\r\n return obj; // {a: '1', b: '2', c:'3'}\r\n};\r\n\r\n// export const appendQuery () {}\r\n","import { getQuery } from './query';\r\n\r\nexport interface EzopenURL {\r\n protocol: string; // 默认ezopen:\r\n search?: string;\r\n searchParams?: Record<string, any>;\r\n pathname: string;\r\n origin: string;\r\n href: string;\r\n hostname: string;\r\n deviceSerial: string;\r\n channelNo: string;\r\n /** 播放类型 直播 | 回放 */\r\n type: 'live' | 'rec' | string; //\r\n /** 回放存储类型 */\r\n recType?: 'cloud' | string; //\r\n /** 清晰度 */\r\n definition?: 'sd' | 'hd';\r\n}\r\n\r\n/**\r\n * @description 解析ezopen 协议 url\r\n * @param {string} url ezopen url\r\n * @returns {EzopenParams}\r\n *\r\n * ```ts\r\n * parseEzopenUrl(\"ezopen://open.ys7.com/C116331000/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A\")\r\n * ```\r\n */\r\nexport function parseEzopenUrl(url: string) {\r\n const obj: Partial<EzopenURL> = {};\r\n if (/^ezopen:\\/\\//.test(url)) {\r\n obj.protocol = url.split('//')[0];\r\n obj.search = url.split('?')[1] ? '?' + url.split('?')[1] : '';\r\n obj.hostname = url.split('/')[2];\r\n obj.origin = obj.protocol + '//' + obj.hostname;\r\n obj.pathname = url.split('?')[0].replace(obj.origin, '');\r\n obj.href = url;\r\n const pathnames = obj.pathname.split('/');\r\n const lastPath = pathnames[2].split('.');\r\n\r\n obj.deviceSerial = pathnames[1];\r\n obj.channelNo = lastPath[0];\r\n obj.type = lastPath[lastPath.length - 1];\r\n if (obj.type === 'live') {\r\n obj.definition = lastPath.length > 2 ? (lastPath[1] as 'hd') : 'sd';\r\n }\r\n\r\n if (obj.type === 'rec') {\r\n obj.recType = lastPath.length > 2 ? lastPath[1] : '';\r\n }\r\n\r\n obj.searchParams = getQuery(url);\r\n\r\n return obj;\r\n }\r\n\r\n return {};\r\n}\r\n\r\nexport interface SwitchEzpoenOptions {\r\n deviceSerial?: string;\r\n channelNo?: string;\r\n type?: 'live' | 'rec';\r\n recType?: 'cloud'; // 仅 rec\r\n definition?: 'hd' | 'sd'; // 仅 live\r\n search?: string;\r\n}\r\n\r\n/**\r\n * @description exopen 协议播放地址切换\r\n * @param {string} url exopen 协议播放地址\r\n * @param {SwitchEzpoenOptions} options\r\n * @returns\r\n *\r\n * @example\r\n * ```ts\r\n * switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live?a=1', {type: 'rec',recType: 'cloud',search: 'b=23&c=123423&a=00000&c=你好啊',definition: 'hd'}) // -> ezopen://open.ys7.com/C11633138/1.cloud.rec?a=00000&b=23&c=%E4%BD%A0%E5%A5%BD%E5%95%8A\r\n *\r\n * switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live', {type: 'live',recType: 'cloud',search: 'b=23&c=123423', definition: 'sd'}) // -> ezopen://open.ys7.com/C11633138/1.live?b=23&c=123423\r\n * ```\r\n */\r\nexport function switchEzopenUrl(url: string, options?: SwitchEzpoenOptions) {\r\n const { type, channelNo, recType, definition, deviceSerial } = options ?? {};\r\n let { search } = options ?? {};\r\n\r\n if (!!type || !!channelNo || !!recType || !!definition || !!search) {\r\n const obj: Partial<EzopenURL> = parseEzopenUrl(url);\r\n\r\n if (search) {\r\n const ns = Object.assign(\r\n {},\r\n obj.searchParams,\r\n getQuery('?' + search.replace('?', ''))\r\n ) as Record<string, string>;\r\n\r\n search = Object.entries(ns)\r\n .reduce<string>((acc, [key, value]) => {\r\n acc += `${key}=${encodeURIComponent(value)}&`;\r\n return acc;\r\n }, '?')\r\n .replace(/&$/, '');\r\n } else {\r\n search = obj.search;\r\n }\r\n\r\n return `${obj.origin}/${deviceSerial ?? obj.deviceSerial}/${channelNo ?? obj.channelNo}${\r\n type === 'rec' && recType ? '.' + recType : ''\r\n }${type === 'live' && definition === 'hd' ? '.' + definition : ''}.${\r\n type ?? obj.type\r\n }${search}`;\r\n }\r\n\r\n return url;\r\n}\r\n","export function isHttp(url: string) {\r\n return /^http[s]?:\\/\\//.test(url);\r\n}\r\n","/**\r\n * @description 判断是不是移动端(包括pad)\r\n * @returns {boolean}\r\n */\r\nexport function isMobile(agent?: string) {\r\n return !!((agent ?? window?.navigator?.userAgent) || '').match(\r\n /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i\r\n );\r\n}\r\n","/**\r\n * @description 从对象中挑选值\r\n * @param obj\r\n * @param keys\r\n * @returns\r\n *\r\n * @example\r\n *\r\n * ```ts\r\n * pick({a: \"1\", b: \"b\"}, ['a']) // => {a: 'a'}\r\n * ```\r\n */\r\nexport function pick(obj: object, keys: string[]) {\r\n return Object.entries(obj).reduce((acc, [key, value]) => {\r\n if (keys.includes(key)) {\r\n (acc as any)[key] = value;\r\n }\r\n return acc;\r\n }, {});\r\n}\r\n","import { parseEzopenUrl, switchEzopenUrl } from './ezopenUrl';\n\nimport { isHttp } from './isHttp';\nimport { isMobile } from './isMobile';\nimport { getQuery } from './query';\nimport { pick } from './pick';\n\nconsole.log(\n switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live?a=1', {\n type: 'rec',\n recType: 'cloud',\n search: 'b=23&c=123423&a=00000&c=你好啊',\n definition: 'hd'\n })\n);\nconsole.log(\n switchEzopenUrl('ezopen://open.ys7.com/C11633138/1.hd.live', {\n type: 'live',\n recType: 'cloud',\n search: 'b=23&c=123423',\n definition: 'sd'\n })\n);\n\nexport { parseEzopenUrl, switchEzopenUrl, isHttp, isMobile, getQuery, pick };\n"],"names":["getQuery","url","query","split","obj","vars","i","length","pair","decodeURIComponent","parseEzopenUrl","test","protocol","search","hostname","origin","pathname","replace","href","pathnames","lastPath","deviceSerial","channelNo","type","definition","recType","searchParams","switchEzopenUrl","options","ns","Object","assign","entries","reduce","acc","key","value","encodeURIComponent","isHttp","isMobile","agent","window","navigator","userAgent","match","pick","keys","includes","console","log"],"mappings":"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"}
|