master-utils-lib 1.0.1

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.
@@ -0,0 +1,111 @@
1
+ var isIOS = function isIOS() {
2
+ if (typeof navigator === 'undefined') return false;
3
+ return /iPhone|iPad|iPod/i.test(navigator.userAgent);
4
+ };
5
+ var isAndroid = function isAndroid() {
6
+ if (typeof navigator === 'undefined') return false;
7
+ return /Android/i.test(navigator.userAgent);
8
+ };
9
+ var isWeChat = function isWeChat() {
10
+ if (typeof navigator === 'undefined') return false;
11
+ return /MicroMessenger/i.test(navigator.userAgent);
12
+ };
13
+
14
+ var getQueryString = function getQueryString(name) {
15
+ if (typeof window === 'undefined') return null;
16
+ var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
17
+ var r = window.location.search.substr(1).match(reg);
18
+ if (r != null) return decodeURIComponent(r[2]);
19
+ return null;
20
+ };
21
+ var stringifyQuery = function stringifyQuery(obj) {
22
+ if (!obj) return '';
23
+ var pairs = [];
24
+ for (var key in obj) {
25
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
26
+ var value = obj[key];
27
+ if (value !== undefined && value !== null) {
28
+ pairs.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(String(value))));
29
+ }
30
+ }
31
+ }
32
+ return pairs.join('&');
33
+ };
34
+
35
+ var setStorage = function setStorage(key, value, expire) {
36
+ if (expire === void 0) {
37
+ expire = null;
38
+ }
39
+ if (typeof window === 'undefined') return;
40
+ var data = {
41
+ value: value,
42
+ expire: expire !== null ? new Date().getTime() + expire : null
43
+ };
44
+ localStorage.setItem(key, JSON.stringify(data));
45
+ };
46
+ var getStorage = function getStorage(key) {
47
+ if (typeof window === 'undefined') return null;
48
+ var item = localStorage.getItem(key);
49
+ if (!item) return null;
50
+ try {
51
+ var data = JSON.parse(item);
52
+ if (data.expire && data.expire < new Date().getTime()) {
53
+ localStorage.removeItem(key);
54
+ return null;
55
+ }
56
+ return data.value;
57
+ } catch (e) {
58
+ return null;
59
+ }
60
+ };
61
+ var removeStorage = function removeStorage(key) {
62
+ if (typeof window === 'undefined') return;
63
+ localStorage.removeItem(key);
64
+ };
65
+
66
+ var isPhone = function isPhone(phone) {
67
+ return /^1[3-9]\d{9}$/.test(phone);
68
+ };
69
+ var isEmail = function isEmail(email) {
70
+ return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(email);
71
+ };
72
+
73
+ var formatMoney = function formatMoney(amount, decimals, symbol) {
74
+ if (decimals === void 0) {
75
+ decimals = 2;
76
+ }
77
+ if (symbol === void 0) {
78
+ symbol = '¥';
79
+ }
80
+ var num = Number(amount);
81
+ if (isNaN(num)) return "".concat(symbol, "0.00");
82
+ return symbol + num.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
83
+ };
84
+ var formatDate = function formatDate(date, fmt) {
85
+ if (fmt === void 0) {
86
+ fmt = 'YYYY-MM-DD';
87
+ }
88
+ var d = new Date(date);
89
+ if (isNaN(d.getTime())) return '';
90
+ var o = {
91
+ 'M+': d.getMonth() + 1,
92
+ 'D+': d.getDate(),
93
+ 'h+': d.getHours(),
94
+ 'm+': d.getMinutes(),
95
+ 's+': d.getSeconds(),
96
+ 'q+': Math.floor((d.getMonth() + 3) / 3),
97
+ 'S': d.getMilliseconds()
98
+ };
99
+ if (/(Y+)/.test(fmt)) {
100
+ fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
101
+ }
102
+ for (var k in o) {
103
+ if (new RegExp('(' + k + ')').test(fmt)) {
104
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] + '' : ('00' + o[k]).substr(('' + o[k]).length));
105
+ }
106
+ }
107
+ return fmt;
108
+ };
109
+
110
+ export { formatDate, formatMoney, getQueryString, getStorage, isAndroid, isEmail, isIOS, isPhone, isWeChat, removeStorage, setStorage, stringifyQuery };
111
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/device/index.ts","../src/url/index.ts","../src/storage/index.ts","../src/validate/index.ts","../src/format/index.ts"],"sourcesContent":["export const isIOS = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\n\nexport const isAndroid = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /Android/i.test(navigator.userAgent);\n};\n\nexport const isWeChat = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /MicroMessenger/i.test(navigator.userAgent);\n};\n","export const getQueryString = (name: string): string | null => {\n if (typeof window === 'undefined') return null;\n const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');\n const r = window.location.search.substr(1).match(reg);\n if (r != null) return decodeURIComponent(r[2]);\n return null;\n};\n\nexport const stringifyQuery = (obj: Record<string, any>): string => {\n if (!obj) return '';\n const pairs: string[] = [];\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (value !== undefined && value !== null) {\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n }\n return pairs.join('&');\n};\n","interface StorageData<T> {\n value: T;\n expire: number | null;\n}\n\nexport const setStorage = <T>(key: string, value: T, expire: number | null = null): void => {\n if (typeof window === 'undefined') return;\n const data: StorageData<T> = {\n value,\n expire: expire !== null ? new Date().getTime() + expire : null,\n };\n localStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getStorage = <T>(key: string): T | null => {\n if (typeof window === 'undefined') return null;\n const item = localStorage.getItem(key);\n if (!item) return null;\n\n try {\n const data: StorageData<T> = JSON.parse(item);\n if (data.expire && data.expire < new Date().getTime()) {\n localStorage.removeItem(key);\n return null;\n }\n return data.value;\n } catch (e) {\n return null;\n }\n};\n\nexport const removeStorage = (key: string): void => {\n if (typeof window === 'undefined') return;\n localStorage.removeItem(key);\n};\n","export const isPhone = (phone: string): boolean => {\n return /^1[3-9]\\d{9}$/.test(phone);\n};\n\nexport const isEmail = (email: string): boolean => {\n return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/.test(email);\n};\n","export const formatMoney = (amount: number | string, decimals = 2, symbol = '¥'): string => {\n const num = Number(amount);\n if (isNaN(num)) return `${symbol}0.00`;\n return symbol + num.toFixed(decimals).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const formatDate = (date: Date | number | string, fmt = 'YYYY-MM-DD'): string => {\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n\n const o: Record<string, number> = {\n 'M+': d.getMonth() + 1,\n 'D+': d.getDate(),\n 'h+': d.getHours(),\n 'm+': d.getMinutes(),\n 's+': d.getSeconds(),\n 'q+': Math.floor((d.getMonth() + 3) / 3),\n 'S': d.getMilliseconds(),\n };\n\n if (/(Y+)/.test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n\n for (const k in o) {\n if (new RegExp('(' + k + ')').test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k] + '') : (('00' + o[k]).substr(('' + o[k]).length)));\n }\n }\n return fmt;\n};\n"],"names":["isIOS","navigator","test","userAgent","isAndroid","isWeChat","getQueryString","name","window","reg","RegExp","r","location","search","substr","match","decodeURIComponent","stringifyQuery","obj","pairs","key","Object","prototype","hasOwnProperty","call","value","undefined","push","encodeURIComponent","concat","String","join","setStorage","expire","data","Date","getTime","localStorage","setItem","JSON","stringify","getStorage","item","getItem","parse","removeItem","e","removeStorage","isPhone","phone","isEmail","email","formatMoney","amount","decimals","symbol","num","Number","isNaN","toFixed","replace","formatDate","date","fmt","d","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","$1","getFullYear","length","k"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ var isIOS = function isIOS() {
4
+ if (typeof navigator === 'undefined') return false;
5
+ return /iPhone|iPad|iPod/i.test(navigator.userAgent);
6
+ };
7
+ var isAndroid = function isAndroid() {
8
+ if (typeof navigator === 'undefined') return false;
9
+ return /Android/i.test(navigator.userAgent);
10
+ };
11
+ var isWeChat = function isWeChat() {
12
+ if (typeof navigator === 'undefined') return false;
13
+ return /MicroMessenger/i.test(navigator.userAgent);
14
+ };
15
+
16
+ var getQueryString = function getQueryString(name) {
17
+ if (typeof window === 'undefined') return null;
18
+ var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
19
+ var r = window.location.search.substr(1).match(reg);
20
+ if (r != null) return decodeURIComponent(r[2]);
21
+ return null;
22
+ };
23
+ var stringifyQuery = function stringifyQuery(obj) {
24
+ if (!obj) return '';
25
+ var pairs = [];
26
+ for (var key in obj) {
27
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
28
+ var value = obj[key];
29
+ if (value !== undefined && value !== null) {
30
+ pairs.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(String(value))));
31
+ }
32
+ }
33
+ }
34
+ return pairs.join('&');
35
+ };
36
+
37
+ var setStorage = function setStorage(key, value, expire) {
38
+ if (expire === void 0) {
39
+ expire = null;
40
+ }
41
+ if (typeof window === 'undefined') return;
42
+ var data = {
43
+ value: value,
44
+ expire: expire !== null ? new Date().getTime() + expire : null
45
+ };
46
+ localStorage.setItem(key, JSON.stringify(data));
47
+ };
48
+ var getStorage = function getStorage(key) {
49
+ if (typeof window === 'undefined') return null;
50
+ var item = localStorage.getItem(key);
51
+ if (!item) return null;
52
+ try {
53
+ var data = JSON.parse(item);
54
+ if (data.expire && data.expire < new Date().getTime()) {
55
+ localStorage.removeItem(key);
56
+ return null;
57
+ }
58
+ return data.value;
59
+ } catch (e) {
60
+ return null;
61
+ }
62
+ };
63
+ var removeStorage = function removeStorage(key) {
64
+ if (typeof window === 'undefined') return;
65
+ localStorage.removeItem(key);
66
+ };
67
+
68
+ var isPhone = function isPhone(phone) {
69
+ return /^1[3-9]\d{9}$/.test(phone);
70
+ };
71
+ var isEmail = function isEmail(email) {
72
+ return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(email);
73
+ };
74
+
75
+ var formatMoney = function formatMoney(amount, decimals, symbol) {
76
+ if (decimals === void 0) {
77
+ decimals = 2;
78
+ }
79
+ if (symbol === void 0) {
80
+ symbol = '¥';
81
+ }
82
+ var num = Number(amount);
83
+ if (isNaN(num)) return "".concat(symbol, "0.00");
84
+ return symbol + num.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
85
+ };
86
+ var formatDate = function formatDate(date, fmt) {
87
+ if (fmt === void 0) {
88
+ fmt = 'YYYY-MM-DD';
89
+ }
90
+ var d = new Date(date);
91
+ if (isNaN(d.getTime())) return '';
92
+ var o = {
93
+ 'M+': d.getMonth() + 1,
94
+ 'D+': d.getDate(),
95
+ 'h+': d.getHours(),
96
+ 'm+': d.getMinutes(),
97
+ 's+': d.getSeconds(),
98
+ 'q+': Math.floor((d.getMonth() + 3) / 3),
99
+ 'S': d.getMilliseconds()
100
+ };
101
+ if (/(Y+)/.test(fmt)) {
102
+ fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
103
+ }
104
+ for (var k in o) {
105
+ if (new RegExp('(' + k + ')').test(fmt)) {
106
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] + '' : ('00' + o[k]).substr(('' + o[k]).length));
107
+ }
108
+ }
109
+ return fmt;
110
+ };
111
+
112
+ exports.formatDate = formatDate;
113
+ exports.formatMoney = formatMoney;
114
+ exports.getQueryString = getQueryString;
115
+ exports.getStorage = getStorage;
116
+ exports.isAndroid = isAndroid;
117
+ exports.isEmail = isEmail;
118
+ exports.isIOS = isIOS;
119
+ exports.isPhone = isPhone;
120
+ exports.isWeChat = isWeChat;
121
+ exports.removeStorage = removeStorage;
122
+ exports.setStorage = setStorage;
123
+ exports.stringifyQuery = stringifyQuery;
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/device/index.ts","../src/url/index.ts","../src/storage/index.ts","../src/validate/index.ts","../src/format/index.ts"],"sourcesContent":["export const isIOS = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\n\nexport const isAndroid = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /Android/i.test(navigator.userAgent);\n};\n\nexport const isWeChat = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /MicroMessenger/i.test(navigator.userAgent);\n};\n","export const getQueryString = (name: string): string | null => {\n if (typeof window === 'undefined') return null;\n const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');\n const r = window.location.search.substr(1).match(reg);\n if (r != null) return decodeURIComponent(r[2]);\n return null;\n};\n\nexport const stringifyQuery = (obj: Record<string, any>): string => {\n if (!obj) return '';\n const pairs: string[] = [];\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (value !== undefined && value !== null) {\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n }\n return pairs.join('&');\n};\n","interface StorageData<T> {\n value: T;\n expire: number | null;\n}\n\nexport const setStorage = <T>(key: string, value: T, expire: number | null = null): void => {\n if (typeof window === 'undefined') return;\n const data: StorageData<T> = {\n value,\n expire: expire !== null ? new Date().getTime() + expire : null,\n };\n localStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getStorage = <T>(key: string): T | null => {\n if (typeof window === 'undefined') return null;\n const item = localStorage.getItem(key);\n if (!item) return null;\n\n try {\n const data: StorageData<T> = JSON.parse(item);\n if (data.expire && data.expire < new Date().getTime()) {\n localStorage.removeItem(key);\n return null;\n }\n return data.value;\n } catch (e) {\n return null;\n }\n};\n\nexport const removeStorage = (key: string): void => {\n if (typeof window === 'undefined') return;\n localStorage.removeItem(key);\n};\n","export const isPhone = (phone: string): boolean => {\n return /^1[3-9]\\d{9}$/.test(phone);\n};\n\nexport const isEmail = (email: string): boolean => {\n return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/.test(email);\n};\n","export const formatMoney = (amount: number | string, decimals = 2, symbol = '¥'): string => {\n const num = Number(amount);\n if (isNaN(num)) return `${symbol}0.00`;\n return symbol + num.toFixed(decimals).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const formatDate = (date: Date | number | string, fmt = 'YYYY-MM-DD'): string => {\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n\n const o: Record<string, number> = {\n 'M+': d.getMonth() + 1,\n 'D+': d.getDate(),\n 'h+': d.getHours(),\n 'm+': d.getMinutes(),\n 's+': d.getSeconds(),\n 'q+': Math.floor((d.getMonth() + 3) / 3),\n 'S': d.getMilliseconds(),\n };\n\n if (/(Y+)/.test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n\n for (const k in o) {\n if (new RegExp('(' + k + ')').test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k] + '') : (('00' + o[k]).substr(('' + o[k]).length)));\n }\n }\n return fmt;\n};\n"],"names":["isIOS","navigator","test","userAgent","isAndroid","isWeChat","getQueryString","name","window","reg","RegExp","r","location","search","substr","match","decodeURIComponent","stringifyQuery","obj","pairs","key","Object","prototype","hasOwnProperty","call","value","undefined","push","encodeURIComponent","concat","String","join","setStorage","expire","data","Date","getTime","localStorage","setItem","JSON","stringify","getStorage","item","getItem","parse","removeItem","e","removeStorage","isPhone","phone","isEmail","email","formatMoney","amount","decimals","symbol","num","Number","isNaN","toFixed","replace","formatDate","date","fmt","d","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","$1","getFullYear","length","k"],"mappings":"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"}
@@ -0,0 +1,130 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.H5Utils = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ var isIOS = function isIOS() {
8
+ if (typeof navigator === 'undefined') return false;
9
+ return /iPhone|iPad|iPod/i.test(navigator.userAgent);
10
+ };
11
+ var isAndroid = function isAndroid() {
12
+ if (typeof navigator === 'undefined') return false;
13
+ return /Android/i.test(navigator.userAgent);
14
+ };
15
+ var isWeChat = function isWeChat() {
16
+ if (typeof navigator === 'undefined') return false;
17
+ return /MicroMessenger/i.test(navigator.userAgent);
18
+ };
19
+
20
+ var getQueryString = function getQueryString(name) {
21
+ if (typeof window === 'undefined') return null;
22
+ var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
23
+ var r = window.location.search.substr(1).match(reg);
24
+ if (r != null) return decodeURIComponent(r[2]);
25
+ return null;
26
+ };
27
+ var stringifyQuery = function stringifyQuery(obj) {
28
+ if (!obj) return '';
29
+ var pairs = [];
30
+ for (var key in obj) {
31
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
32
+ var value = obj[key];
33
+ if (value !== undefined && value !== null) {
34
+ pairs.push("".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(String(value))));
35
+ }
36
+ }
37
+ }
38
+ return pairs.join('&');
39
+ };
40
+
41
+ var setStorage = function setStorage(key, value, expire) {
42
+ if (expire === void 0) {
43
+ expire = null;
44
+ }
45
+ if (typeof window === 'undefined') return;
46
+ var data = {
47
+ value: value,
48
+ expire: expire !== null ? new Date().getTime() + expire : null
49
+ };
50
+ localStorage.setItem(key, JSON.stringify(data));
51
+ };
52
+ var getStorage = function getStorage(key) {
53
+ if (typeof window === 'undefined') return null;
54
+ var item = localStorage.getItem(key);
55
+ if (!item) return null;
56
+ try {
57
+ var data = JSON.parse(item);
58
+ if (data.expire && data.expire < new Date().getTime()) {
59
+ localStorage.removeItem(key);
60
+ return null;
61
+ }
62
+ return data.value;
63
+ } catch (e) {
64
+ return null;
65
+ }
66
+ };
67
+ var removeStorage = function removeStorage(key) {
68
+ if (typeof window === 'undefined') return;
69
+ localStorage.removeItem(key);
70
+ };
71
+
72
+ var isPhone = function isPhone(phone) {
73
+ return /^1[3-9]\d{9}$/.test(phone);
74
+ };
75
+ var isEmail = function isEmail(email) {
76
+ return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/.test(email);
77
+ };
78
+
79
+ var formatMoney = function formatMoney(amount, decimals, symbol) {
80
+ if (decimals === void 0) {
81
+ decimals = 2;
82
+ }
83
+ if (symbol === void 0) {
84
+ symbol = '¥';
85
+ }
86
+ var num = Number(amount);
87
+ if (isNaN(num)) return "".concat(symbol, "0.00");
88
+ return symbol + num.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
89
+ };
90
+ var formatDate = function formatDate(date, fmt) {
91
+ if (fmt === void 0) {
92
+ fmt = 'YYYY-MM-DD';
93
+ }
94
+ var d = new Date(date);
95
+ if (isNaN(d.getTime())) return '';
96
+ var o = {
97
+ 'M+': d.getMonth() + 1,
98
+ 'D+': d.getDate(),
99
+ 'h+': d.getHours(),
100
+ 'm+': d.getMinutes(),
101
+ 's+': d.getSeconds(),
102
+ 'q+': Math.floor((d.getMonth() + 3) / 3),
103
+ 'S': d.getMilliseconds()
104
+ };
105
+ if (/(Y+)/.test(fmt)) {
106
+ fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
107
+ }
108
+ for (var k in o) {
109
+ if (new RegExp('(' + k + ')').test(fmt)) {
110
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] + '' : ('00' + o[k]).substr(('' + o[k]).length));
111
+ }
112
+ }
113
+ return fmt;
114
+ };
115
+
116
+ exports.formatDate = formatDate;
117
+ exports.formatMoney = formatMoney;
118
+ exports.getQueryString = getQueryString;
119
+ exports.getStorage = getStorage;
120
+ exports.isAndroid = isAndroid;
121
+ exports.isEmail = isEmail;
122
+ exports.isIOS = isIOS;
123
+ exports.isPhone = isPhone;
124
+ exports.isWeChat = isWeChat;
125
+ exports.removeStorage = removeStorage;
126
+ exports.setStorage = setStorage;
127
+ exports.stringifyQuery = stringifyQuery;
128
+
129
+ }));
130
+ //# sourceMappingURL=index.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.min.js","sources":["../src/device/index.ts","../src/url/index.ts","../src/storage/index.ts","../src/validate/index.ts","../src/format/index.ts"],"sourcesContent":["export const isIOS = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n};\n\nexport const isAndroid = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /Android/i.test(navigator.userAgent);\n};\n\nexport const isWeChat = (): boolean => {\n if (typeof navigator === 'undefined') return false;\n return /MicroMessenger/i.test(navigator.userAgent);\n};\n","export const getQueryString = (name: string): string | null => {\n if (typeof window === 'undefined') return null;\n const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');\n const r = window.location.search.substr(1).match(reg);\n if (r != null) return decodeURIComponent(r[2]);\n return null;\n};\n\nexport const stringifyQuery = (obj: Record<string, any>): string => {\n if (!obj) return '';\n const pairs: string[] = [];\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key];\n if (value !== undefined && value !== null) {\n pairs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);\n }\n }\n }\n return pairs.join('&');\n};\n","interface StorageData<T> {\n value: T;\n expire: number | null;\n}\n\nexport const setStorage = <T>(key: string, value: T, expire: number | null = null): void => {\n if (typeof window === 'undefined') return;\n const data: StorageData<T> = {\n value,\n expire: expire !== null ? new Date().getTime() + expire : null,\n };\n localStorage.setItem(key, JSON.stringify(data));\n};\n\nexport const getStorage = <T>(key: string): T | null => {\n if (typeof window === 'undefined') return null;\n const item = localStorage.getItem(key);\n if (!item) return null;\n\n try {\n const data: StorageData<T> = JSON.parse(item);\n if (data.expire && data.expire < new Date().getTime()) {\n localStorage.removeItem(key);\n return null;\n }\n return data.value;\n } catch (e) {\n return null;\n }\n};\n\nexport const removeStorage = (key: string): void => {\n if (typeof window === 'undefined') return;\n localStorage.removeItem(key);\n};\n","export const isPhone = (phone: string): boolean => {\n return /^1[3-9]\\d{9}$/.test(phone);\n};\n\nexport const isEmail = (email: string): boolean => {\n return /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/.test(email);\n};\n","export const formatMoney = (amount: number | string, decimals = 2, symbol = '¥'): string => {\n const num = Number(amount);\n if (isNaN(num)) return `${symbol}0.00`;\n return symbol + num.toFixed(decimals).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n};\n\nexport const formatDate = (date: Date | number | string, fmt = 'YYYY-MM-DD'): string => {\n const d = new Date(date);\n if (isNaN(d.getTime())) return '';\n\n const o: Record<string, number> = {\n 'M+': d.getMonth() + 1,\n 'D+': d.getDate(),\n 'h+': d.getHours(),\n 'm+': d.getMinutes(),\n 's+': d.getSeconds(),\n 'q+': Math.floor((d.getMonth() + 3) / 3),\n 'S': d.getMilliseconds(),\n };\n\n if (/(Y+)/.test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));\n }\n\n for (const k in o) {\n if (new RegExp('(' + k + ')').test(fmt)) {\n fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k] + '') : (('00' + o[k]).substr(('' + o[k]).length)));\n }\n }\n return fmt;\n};\n"],"names":["isIOS","navigator","test","userAgent","isAndroid","isWeChat","getQueryString","name","window","reg","RegExp","r","location","search","substr","match","decodeURIComponent","stringifyQuery","obj","pairs","key","Object","prototype","hasOwnProperty","call","value","undefined","push","encodeURIComponent","concat","String","join","setStorage","expire","data","Date","getTime","localStorage","setItem","JSON","stringify","getStorage","item","getItem","parse","removeItem","e","removeStorage","isPhone","phone","isEmail","email","formatMoney","amount","decimals","symbol","num","Number","isNaN","toFixed","replace","formatDate","date","fmt","d","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","$1","getFullYear","length","k"],"mappings":";;;;;;QAAaA,KAAK,GAAG,SAARA,KAAKA,GAAG;IACjB,EAAA,IAAI,OAAOC,SAAS,KAAK,WAAW,EAAE,OAAO,KAAK;IAClD,EAAA,OAAO,mBAAmB,CAACC,IAAI,CAACD,SAAS,CAACE,SAAS,CAAC;IACxD;QAEaC,SAAS,GAAG,SAAZA,SAASA,GAAG;IACrB,EAAA,IAAI,OAAOH,SAAS,KAAK,WAAW,EAAE,OAAO,KAAK;IAClD,EAAA,OAAO,UAAU,CAACC,IAAI,CAACD,SAAS,CAACE,SAAS,CAAC;IAC/C;QAEaE,QAAQ,GAAG,SAAXA,QAAQA,GAAG;IACpB,EAAA,IAAI,OAAOJ,SAAS,KAAK,WAAW,EAAE,OAAO,KAAK;IAClD,EAAA,OAAO,iBAAiB,CAACC,IAAI,CAACD,SAAS,CAACE,SAAS,CAAC;IACtD;;QCbaG,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAY,EAAA;IACvC,EAAA,IAAI,OAAOC,MAAM,KAAK,WAAW,EAAE,OAAO,IAAI;IAC9C,EAAA,IAAMC,GAAG,GAAG,IAAIC,MAAM,CAAC,OAAO,GAAGH,IAAI,GAAG,eAAe,EAAE,GAAG,CAAC;IAC7D,EAAA,IAAMI,CAAC,GAAGH,MAAM,CAACI,QAAQ,CAACC,MAAM,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,KAAK,CAACN,GAAG,CAAC;MACrD,IAAIE,CAAC,IAAI,IAAI,EAAE,OAAOK,kBAAkB,CAACL,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,EAAA,OAAO,IAAI;IACf;QAEaM,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,GAAwB,EAAA;IACnD,EAAA,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE;MACnB,IAAMC,KAAK,GAAa,EAAE;IAC1B,EAAA,KAAK,IAAMC,GAAG,IAAIF,GAAG,EAAE;IACnB,IAAA,IAAIG,MAAM,CAACC,SAAS,CAACC,cAAc,CAACC,IAAI,CAACN,GAAG,EAAEE,GAAG,CAAC,EAAE;IAChD,MAAA,IAAMK,KAAK,GAAGP,GAAG,CAACE,GAAG,CAAC;IACtB,MAAA,IAAIK,KAAK,KAAKC,SAAS,IAAID,KAAK,KAAK,IAAI,EAAE;YACvCN,KAAK,CAACQ,IAAI,CAAC,UAAGC,kBAAkB,CAACR,GAAG,CAAC,EAAA,GAAA,CAAA,CAAAS,MAAA,CAAID,kBAAkB,CAACE,MAAM,CAACL,KAAK,CAAC,CAAC,CAAE,CAAC;IACjF,MAAA;IACJ,IAAA;IACJ,EAAA;IACA,EAAA,OAAON,KAAK,CAACY,IAAI,CAAC,GAAG,CAAC;IAC1B;;ACfO,QAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAOZ,GAAW,EAAEK,KAAQ,EAAEQ,MAA4B,EAAA;IAA5B,EAAA,IAAAA,MAAA,KAAA,MAAA,EAAA;IAAAA,IAAAA,MAAA,GAAA,IAA4B;IAAA,EAAA;IAC7E,EAAA,IAAI,OAAOzB,MAAM,KAAK,WAAW,EAAE;IACnC,EAAA,IAAM0B,IAAI,GAAmB;IACzBT,IAAAA,KAAK,EAAAA,KAAA;IACLQ,IAAAA,MAAM,EAAEA,MAAM,KAAK,IAAI,GAAG,IAAIE,IAAI,EAAE,CAACC,OAAO,EAAE,GAAGH,MAAM,GAAG;OAC7D;MACDI,YAAY,CAACC,OAAO,CAAClB,GAAG,EAAEmB,IAAI,CAACC,SAAS,CAACN,IAAI,CAAC,CAAC;IACnD;QAEaO,UAAU,GAAG,SAAbA,UAAUA,CAAOrB,GAAW,EAAA;IACrC,EAAA,IAAI,OAAOZ,MAAM,KAAK,WAAW,EAAE,OAAO,IAAI;IAC9C,EAAA,IAAMkC,IAAI,GAAGL,YAAY,CAACM,OAAO,CAACvB,GAAG,CAAC;IACtC,EAAA,IAAI,CAACsB,IAAI,EAAE,OAAO,IAAI;MAEtB,IAAI;IACA,IAAA,IAAMR,IAAI,GAAmBK,IAAI,CAACK,KAAK,CAACF,IAAI,CAAC;IAC7C,IAAA,IAAIR,IAAI,CAACD,MAAM,IAAIC,IAAI,CAACD,MAAM,GAAG,IAAIE,IAAI,EAAE,CAACC,OAAO,EAAE,EAAE;IACnDC,MAAAA,YAAY,CAACQ,UAAU,CAACzB,GAAG,CAAC;IAC5B,MAAA,OAAO,IAAI;IACf,IAAA;QACA,OAAOc,IAAI,CAACT,KAAK;MACrB,CAAC,CAAC,OAAOqB,CAAC,EAAE;IACR,IAAA,OAAO,IAAI;IACf,EAAA;IACJ;QAEaC,aAAa,GAAG,SAAhBA,aAAaA,CAAI3B,GAAW,EAAA;IACrC,EAAA,IAAI,OAAOZ,MAAM,KAAK,WAAW,EAAE;IACnC6B,EAAAA,YAAY,CAACQ,UAAU,CAACzB,GAAG,CAAC;IAChC;;QClCa4B,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAa,EAAA;IACjC,EAAA,OAAO,eAAe,CAAC/C,IAAI,CAAC+C,KAAK,CAAC;IACtC;QAEaC,OAAO,GAAG,SAAVA,OAAOA,CAAIC,KAAa,EAAA;IACjC,EAAA,OAAO,iDAAiD,CAACjD,IAAI,CAACiD,KAAK,CAAC;IACxE;;ACNO,QAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,MAAuB,EAAEC,QAAY,EAAEC,MAAY,EAAA;IAA1B,EAAA,IAAAD,QAAA,KAAA,MAAA,EAAA;IAAAA,IAAAA,QAAA,GAAA,CAAY;IAAA,EAAA;IAAE,EAAA,IAAAC,MAAA,KAAA,MAAA,EAAA;IAAAA,IAAAA,MAAA,GAAA,GAAY;IAAA,EAAA;IAC3E,EAAA,IAAMC,GAAG,GAAGC,MAAM,CAACJ,MAAM,CAAC;IAC1B,EAAA,IAAIK,KAAK,CAACF,GAAG,CAAC,EAAE,OAAO,EAAA,CAAA3B,MAAA,CAAG0B,MAAM,EAAA,MAAA,CAAM;IACtC,EAAA,OAAOA,MAAM,GAAGC,GAAG,CAACG,OAAO,CAACL,QAAQ,CAAC,CAACM,OAAO,CAAC,uBAAuB,EAAE,GAAG,CAAC;IAC/E;AAEO,QAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,IAA4B,EAAEC,GAAkB,EAAA;IAAlB,EAAA,IAAAA,GAAA,KAAA,MAAA,EAAA;IAAAA,IAAAA,GAAA,GAAA,YAAkB;IAAA,EAAA;IACvE,EAAA,IAAMC,CAAC,GAAG,IAAI7B,IAAI,CAAC2B,IAAI,CAAC;MACxB,IAAIJ,KAAK,CAACM,CAAC,CAAC5B,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;IAEjC,EAAA,IAAM6B,CAAC,GAA2B;IAC9B,IAAA,IAAI,EAAED,CAAC,CAACE,QAAQ,EAAE,GAAG,CAAC;IACtB,IAAA,IAAI,EAAEF,CAAC,CAACG,OAAO,EAAE;IACjB,IAAA,IAAI,EAAEH,CAAC,CAACI,QAAQ,EAAE;IAClB,IAAA,IAAI,EAAEJ,CAAC,CAACK,UAAU,EAAE;IACpB,IAAA,IAAI,EAAEL,CAAC,CAACM,UAAU,EAAE;IACpB,IAAA,IAAI,EAAEC,IAAI,CAACC,KAAK,CAAC,CAACR,CAAC,CAACE,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAA,GAAG,EAAEF,CAAC,CAACS,eAAe;OACzB;IAED,EAAA,IAAI,MAAM,CAACvE,IAAI,CAAC6D,GAAG,CAAC,EAAE;IAClBA,IAAAA,GAAG,GAAGA,GAAG,CAACH,OAAO,CAAClD,MAAM,CAACgE,EAAE,EAAE,CAACV,CAAC,CAACW,WAAW,EAAE,GAAG,EAAE,EAAE7D,MAAM,CAAC,CAAC,GAAGJ,MAAM,CAACgE,EAAE,CAACE,MAAM,CAAC,CAAC;IACrF,EAAA;IAEA,EAAA,KAAK,IAAMC,CAAC,IAAIZ,CAAC,EAAE;IACf,IAAA,IAAI,IAAIvD,MAAM,CAAC,GAAG,GAAGmE,CAAC,GAAG,GAAG,CAAC,CAAC3E,IAAI,CAAC6D,GAAG,CAAC,EAAE;UACrCA,GAAG,GAAGA,GAAG,CAACH,OAAO,CAAClD,MAAM,CAACgE,EAAE,EAAGhE,MAAM,CAACgE,EAAE,CAACE,MAAM,KAAK,CAAC,GAAKX,CAAC,CAACY,CAAC,CAAC,GAAG,EAAE,GAAK,CAAC,IAAI,GAAGZ,CAAC,CAACY,CAAC,CAAC,EAAE/D,MAAM,CAAC,CAAC,EAAE,GAAGmD,CAAC,CAACY,CAAC,CAAC,EAAED,MAAM,CAAE,CAAC;IACrH,IAAA;IACJ,EAAA;IACA,EAAA,OAAOb,GAAG;IACd;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,3 @@
1
+ export declare const isIOS: () => boolean;
2
+ export declare const isAndroid: () => boolean;
3
+ export declare const isWeChat: () => boolean;
@@ -0,0 +1,2 @@
1
+ export declare const formatMoney: (amount: number | string, decimals?: number, symbol?: string) => string;
2
+ export declare const formatDate: (date: Date | number | string, fmt?: string) => string;
@@ -0,0 +1,5 @@
1
+ export * from './device';
2
+ export * from './url';
3
+ export * from './storage';
4
+ export * from './validate';
5
+ export * from './format';
@@ -0,0 +1,3 @@
1
+ export declare const setStorage: <T>(key: string, value: T, expire?: number | null) => void;
2
+ export declare const getStorage: <T>(key: string) => T | null;
3
+ export declare const removeStorage: (key: string) => void;
@@ -0,0 +1,2 @@
1
+ export declare const getQueryString: (name: string) => string | null;
2
+ export declare const stringifyQuery: (obj: Record<string, any>) => string;
@@ -0,0 +1,2 @@
1
+ export declare const isPhone: (phone: string) => boolean;
2
+ export declare const isEmail: (email: string) => boolean;
package/jest.config.js ADDED
@@ -0,0 +1,14 @@
1
+ module.exports = {
2
+ preset: 'ts-jest',
3
+ testEnvironment: 'jsdom',
4
+ testMatch: ['**/tests/**/*.test.ts'],
5
+ collectCoverage: true,
6
+ transform: {
7
+ '^.+\\.tsx?$': ['ts-jest', {
8
+ tsconfig: 'tsconfig.test.json',
9
+ }],
10
+ },
11
+ moduleNameMapper: {
12
+ '^h5-utils-lib$': '<rootDir>/src/index.ts',
13
+ },
14
+ };
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "master-utils-lib",
3
+ "version": "1.0.1",
4
+ "description": "A professional, lightweight, and compatible utility library for H5 and PC web development with TypeScript support",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "src",
11
+ "tests",
12
+ "*.config.js",
13
+ "*.config.ts",
14
+ "*.json",
15
+ "README.md",
16
+ "USAGE_EXAMPLES.md",
17
+ "DEVELOPMENT.md",
18
+ "PUBLISH.md",
19
+ "QUICK_START.md"
20
+ ],
21
+ "scripts": {
22
+ "build": "rimraf dist && rollup -c",
23
+ "dev": "rollup -c -w",
24
+ "test": "jest",
25
+ "test:watch": "jest --watch",
26
+ "test:coverage": "jest --coverage",
27
+ "prepublishOnly": "npm run build",
28
+ "prepack": "npm run build",
29
+ "publish:patch": "npm version patch && npm publish",
30
+ "publish:minor": "npm version minor && npm publish",
31
+ "publish:major": "npm version major && npm publish"
32
+ },
33
+ "keywords": [
34
+ "h5",
35
+ "utils",
36
+ "utility",
37
+ "typescript",
38
+ "mobile",
39
+ "browser",
40
+ "storage",
41
+ "format",
42
+ "validate",
43
+ "device-detection"
44
+ ],
45
+ "author": "",
46
+ "license": "ISC",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": ""
50
+ },
51
+ "devDependencies": {
52
+ "@babel/core": "^7.28.5",
53
+ "@babel/preset-env": "^7.28.5",
54
+ "@babel/preset-typescript": "^7.28.5",
55
+ "@rollup/plugin-babel": "^6.1.0",
56
+ "@rollup/plugin-commonjs": "^29.0.0",
57
+ "@rollup/plugin-node-resolve": "^16.0.3",
58
+ "@rollup/plugin-typescript": "^12.3.0",
59
+ "@types/jest": "^30.0.0",
60
+ "jest": "^30.2.0",
61
+ "jest-environment-jsdom": "^30.2.0",
62
+ "rimraf": "^6.1.2",
63
+ "rollup": "^4.53.3",
64
+ "ts-jest": "^29.4.5",
65
+ "tslib": "^2.8.1",
66
+ "typescript": "^5.9.3"
67
+ }
68
+ }
@@ -0,0 +1,39 @@
1
+ const resolve = require('@rollup/plugin-node-resolve');
2
+ const commonjs = require('@rollup/plugin-commonjs');
3
+ const typescript = require('@rollup/plugin-typescript');
4
+ const babel = require('@rollup/plugin-babel');
5
+ const pkg = require('./package.json');
6
+
7
+ const extensions = ['.js', '.ts'];
8
+
9
+ module.exports = {
10
+ input: 'src/index.ts',
11
+ output: [
12
+ {
13
+ file: pkg.main,
14
+ format: 'cjs',
15
+ sourcemap: true,
16
+ },
17
+ {
18
+ file: pkg.module,
19
+ format: 'es',
20
+ sourcemap: true,
21
+ },
22
+ {
23
+ file: 'dist/index.min.js',
24
+ format: 'umd',
25
+ name: 'H5Utils',
26
+ sourcemap: true,
27
+ }
28
+ ],
29
+ plugins: [
30
+ resolve({ extensions }),
31
+ commonjs(),
32
+ typescript({ tsconfig: './tsconfig.json' }),
33
+ babel({
34
+ extensions,
35
+ babelHelpers: 'bundled',
36
+ include: ['src/**/*']
37
+ })
38
+ ]
39
+ };
@@ -0,0 +1,14 @@
1
+ export const isIOS = (): boolean => {
2
+ if (typeof navigator === 'undefined') return false;
3
+ return /iPhone|iPad|iPod/i.test(navigator.userAgent);
4
+ };
5
+
6
+ export const isAndroid = (): boolean => {
7
+ if (typeof navigator === 'undefined') return false;
8
+ return /Android/i.test(navigator.userAgent);
9
+ };
10
+
11
+ export const isWeChat = (): boolean => {
12
+ if (typeof navigator === 'undefined') return false;
13
+ return /MicroMessenger/i.test(navigator.userAgent);
14
+ };
@@ -0,0 +1,31 @@
1
+ export const formatMoney = (amount: number | string, decimals = 2, symbol = '¥'): string => {
2
+ const num = Number(amount);
3
+ if (isNaN(num)) return `${symbol}0.00`;
4
+ return symbol + num.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
5
+ };
6
+
7
+ export const formatDate = (date: Date | number | string, fmt = 'YYYY-MM-DD'): string => {
8
+ const d = new Date(date);
9
+ if (isNaN(d.getTime())) return '';
10
+
11
+ const o: Record<string, number> = {
12
+ 'M+': d.getMonth() + 1,
13
+ 'D+': d.getDate(),
14
+ 'h+': d.getHours(),
15
+ 'm+': d.getMinutes(),
16
+ 's+': d.getSeconds(),
17
+ 'q+': Math.floor((d.getMonth() + 3) / 3),
18
+ 'S': d.getMilliseconds(),
19
+ };
20
+
21
+ if (/(Y+)/.test(fmt)) {
22
+ fmt = fmt.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length));
23
+ }
24
+
25
+ for (const k in o) {
26
+ if (new RegExp('(' + k + ')').test(fmt)) {
27
+ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k] + '') : (('00' + o[k]).substr(('' + o[k]).length)));
28
+ }
29
+ }
30
+ return fmt;
31
+ };
package/src/index.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './device';
2
+ export * from './url';
3
+ export * from './storage';
4
+ export * from './validate';
5
+ export * from './format';