@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 CHANGED
@@ -1,42 +1 @@
1
- ## Logger
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,5 @@
1
+ /**
2
+ * @description 判断是不是移动端(包括pad)
3
+ * @returns {boolean}
4
+ */
5
+ export declare function isMobile(agent?: string): boolean;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @description 从对象中挑选值
3
+ * @param obj
4
+ * @param keys
5
+ * @returns
6
+ *
7
+ * @example
8
+ *
9
+ * ```ts
10
+ * pick({a: "1", b: "b"}, ['a']) // => {a: 'a'}
11
+ * ```
12
+ */
13
+ export declare function pick(obj: object, keys: string[]): {};
@@ -0,0 +1 @@
1
+ export declare const getQuery: (url: string) => Record<string, any>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ezuikit/utils-tools",
3
- "version": "1.0.0-alpha.0",
3
+ "version": "1.0.0-alpha.2",
4
4
  "description": "tools utils",
5
5
  "main": "dist/index.js",
6
6
  "umd": "dist/index.umd.js",
@@ -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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"}