youtil 1.0.8 → 1.0.10

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/cjs/index.d.ts ADDED
@@ -0,0 +1,105 @@
1
+ interface IShowLoadingConfig {
2
+ hasMask?: boolean;
3
+ maskColor?: string;
4
+ cancelInline?: boolean;
5
+ onCancel?: Function;
6
+ id?: string;
7
+ }
8
+ declare const _default: {
9
+ /**
10
+ * 将日期格式化成指定格式的字符串
11
+ * @param date 要格式化的日期,不传时默认当前时间,也可以是一个时间戳等
12
+ * @param fmt 目标字符串格式,支持的字符有:y,M,d,q,w,H,h,m,S,默认:yyyy-MM-dd HH:mm:ss
13
+ * @returns 返回格式化后的日期字符串
14
+ */
15
+ formatDate(date?: Date | number | string, fmt?: string): string;
16
+ /**
17
+ * 将字符串解析成日期
18
+ * @param str 输入的日期字符串,如'2014-09-13'
19
+ * @param fmt 字符串格式,默认'yyyy-MM-dd',支持如下:y、M、d、H、m、s、S,不支持w和q
20
+ * @returns 解析后的Date类型日期
21
+ */
22
+ parseDate(str: string, fmt?: string): Date;
23
+ /**
24
+ * 显示全局loading
25
+ * @param {*} text
26
+ * @param {*} seconds
27
+ * @param {*} options
28
+ */
29
+ showLoading(text?: string, seconds?: number, config?: IShowLoadingConfig): void;
30
+ hideLoading(): void;
31
+ /**
32
+ * 从URL中获取某个参数,如果不存在返回 undefined ,如果存在多个同名参数,返回第一个匹配值
33
+ * getParam('a', '?a=1&b=&c=3&c=33#abc') // '1'
34
+ * getParam('b', '?a=1&b=&c=3&c=33#abc') // ''
35
+ * getParam('c', '?a=1&b=&c=3&c=33#abc') // 3
36
+ * getParam('d', '?a=1&b=&c=3&c=33#abc') // undefined
37
+ * @param {*} name 参数名
38
+ * @param {*} url 要获取的URL,默认当前地址
39
+ */
40
+ getParam(name: string, url?: string): string;
41
+ /**
42
+ * 从URL中获取int参数
43
+ * @param {*} name 参数名
44
+ * @param {*} url 要获取的URL,默认当前地址
45
+ */
46
+ getParamInt(name: string, url?: string): number;
47
+ /**
48
+ * 获取某个URL的全部参数
49
+ * getParams('?a=1&b=2#cc') // {a: '1', b: '2'}
50
+ * @param url
51
+ * @returns 参数对象
52
+ */
53
+ getParams(url?: string): any;
54
+ /**
55
+ * 给URL设置参数,如果已经存在,替换之,兼容hash存在的情况
56
+ * setParam('a', '123', '?a=1&b=2&a=3#d') // '?a=123&b=2&a=123#d'
57
+ * setParam('d', '444', '?a=1&b=2&a=3#d') // '?a=1&b=2&a=3&d=444#d'
58
+ * @param {Object} name 参数名
59
+ * @param {Object} value 参数值
60
+ * @param {Object} url 如果不传默认当前页面URL
61
+ */
62
+ setParam(name: string, value: string | number, url?: string): string;
63
+ /**
64
+ * 删除URL中某个参数
65
+ * delParam('a', '?a=1&b=2&a=3#d') // '?b=2#d'
66
+ * delParam('b', '?a=1&b=2&a=3#d') // '?a=1&a=3#d'
67
+ * delParam('a', '?a=1#d') // '#d'
68
+ * @param name 参数名
69
+ * @param url 要删除的URL,默认当前页面URL
70
+ * @returns 处理完后的URL
71
+ */
72
+ delParam(name: string, url: string): string;
73
+ /**
74
+ * 休息一段时间,单位毫秒
75
+ * 示例:await sleep(200); // 休息200毫秒
76
+ * @param time 要休息的时间,单位毫秒,不传默认0
77
+ * @returns
78
+ */
79
+ sleep: (time?: number) => Promise<unknown>;
80
+ /**
81
+ * 基于JSON的简单深拷贝
82
+ * @param obj 要复制的对象,非对象格式会直接返回
83
+ * @returns
84
+ */
85
+ deepCopy: (obj: any) => any;
86
+ /**
87
+ * HTML编码,例如将 【"】 变成 【&quot;】
88
+ * @param {*} html 待编码的原始字符串,如果传入对象会遍历处理
89
+ * @returns
90
+ */
91
+ encodeHtml(html: string | any): any;
92
+ /**
93
+ * HTML解码,例如将 【&quot;】 变成 【"】
94
+ * @param {*} html 已经被HTML编码过的字符串,如果传入对象会遍历处理
95
+ * @returns
96
+ */
97
+ decodeHtml(html: string | any): any;
98
+ /**
99
+ * 将一个普通对象转为 a=1&b=2 的URL格式,会自动过滤undefined的值
100
+ * @param data 一个普通对象,如果对象嵌对象则会被自动转为JSON
101
+ * @returns 返回类似 a=1&b=2 的字符串
102
+ */
103
+ toUrlParams(data: any): string;
104
+ };
105
+ export default _default;
package/cjs/index.js ADDED
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return _default;
9
+ }
10
+ });
11
+ var _instanceof = require("@swc/helpers/lib/_instanceof.js").default;
12
+ var _slicedToArray = require("@swc/helpers/lib/_sliced_to_array.js").default;
13
+ var _default = {
14
+ /**
15
+ * 将日期格式化成指定格式的字符串
16
+ * @param date 要格式化的日期,不传时默认当前时间,也可以是一个时间戳等
17
+ * @param fmt 目标字符串格式,支持的字符有:y,M,d,q,w,H,h,m,S,默认:yyyy-MM-dd HH:mm:ss
18
+ * @returns 返回格式化后的日期字符串
19
+ */ formatDate: function formatDate(date, fmt) {
20
+ var _loop = function(i) {
21
+ fmt = fmt.replace(new RegExp("".concat(i, "+"), "g"), function(m) {
22
+ var val = "".concat(obj[i]);
23
+ if (i === "w") return (m.length > 2 ? "星期" : "周") + week[val];
24
+ for(var j = 0, len = val.length; j < m.length - len; j++)val = "0".concat(val);
25
+ return m.length === 1 ? val : val.substring(val.length - m.length);
26
+ });
27
+ };
28
+ if (!date) return "";
29
+ if (typeof date === "number") // 1687682453445
30
+ date = new Date(date);
31
+ else if (typeof date === "string") {
32
+ if (/^\d{12,13}$/g.test(date)) // '1687682453445'
33
+ date = new Date(parseInt(date));
34
+ else if (/^.{10}T.{8,12}Z?$/g.test(date)) // '2019-01-01T00:00:00.000Z'
35
+ date = new Date(date);
36
+ else return date;
37
+ }
38
+ if (!_instanceof(date, Date)) throw new Error("formatDate error: not date.");
39
+ if (isNaN(date === null || date === void 0 ? void 0 : date.getFullYear())) throw new Error("formatDate error: invalid date.");
40
+ fmt = fmt || "yyyy-MM-dd HH:mm:ss";
41
+ var obj = {
42
+ y: date.getFullYear(),
43
+ M: date.getMonth() + 1,
44
+ d: date.getDate(),
45
+ q: Math.floor((date.getMonth() + 3) / 3),
46
+ w: date.getDay(),
47
+ H: date.getHours(),
48
+ h: date.getHours() % 12 === 0 ? 12 : date.getHours() % 12,
49
+ m: date.getMinutes(),
50
+ s: date.getSeconds(),
51
+ S: date.getMilliseconds()
52
+ };
53
+ var week = [
54
+ "天",
55
+ "一",
56
+ "二",
57
+ "三",
58
+ "四",
59
+ "五",
60
+ "六"
61
+ ];
62
+ // eslint-disable-next-line guard-for-in
63
+ for(var i in obj)_loop(i);
64
+ return fmt;
65
+ },
66
+ /**
67
+ * 将字符串解析成日期
68
+ * @param str 输入的日期字符串,如'2014-09-13'
69
+ * @param fmt 字符串格式,默认'yyyy-MM-dd',支持如下:y、M、d、H、m、s、S,不支持w和q
70
+ * @returns 解析后的Date类型日期
71
+ */ parseDate: function parseDate(str, fmt) {
72
+ fmt = fmt || "yyyy-MM-dd";
73
+ var obj = {
74
+ y: 0,
75
+ M: 1,
76
+ d: 0,
77
+ H: 0,
78
+ h: 0,
79
+ m: 0,
80
+ s: 0,
81
+ S: 0
82
+ };
83
+ fmt.replace(/([^yMdHmsS]*?)(([yMdHmsS])\3*)([^yMdHmsS]*?)/g, function(m, $1, $2, $3, $4) {
84
+ str = str.replace(new RegExp("".concat($1, "(\\d{").concat($2.length, "})").concat($4)), function(_m, _$1) {
85
+ obj[$3] = parseInt(_$1);
86
+ return "";
87
+ });
88
+ return "";
89
+ });
90
+ obj.M--; // 月份是从0开始的,所以要减去1
91
+ var date = new Date(obj.y, obj.M, obj.d, obj.H, obj.m, obj.s);
92
+ if (obj.S !== 0) date.setMilliseconds(obj.S); // 如果设置了毫秒
93
+ return date;
94
+ },
95
+ /**
96
+ * 显示全局loading
97
+ * @param {*} text
98
+ * @param {*} seconds
99
+ * @param {*} options
100
+ */ showLoading: function showLoading() {
101
+ var text = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "请稍候", seconds = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 10, config = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
102
+ var _this = this;
103
+ var defaultConfig = {
104
+ hasMask: true,
105
+ maskColor: "transparent",
106
+ onCancel: null,
107
+ cancelInline: false,
108
+ id: "com_global_page_loading"
109
+ };
110
+ config = Object.assign({}, defaultConfig, config);
111
+ var id = config.id;
112
+ var timeoutKey = "_".concat(id, "_timeout");
113
+ if (window[timeoutKey]) clearTimeout(window[timeoutKey]);
114
+ var dom = document.getElementById(id);
115
+ if (!dom) {
116
+ dom = document.createElement("div");
117
+ dom.id = id;
118
+ dom.className = id;
119
+ document.body.append(dom);
120
+ }
121
+ var styleId = "".concat(id, "_style");
122
+ if (!document.getElementById(styleId)) {
123
+ var style = document.createElement("style");
124
+ style.id = styleId;
125
+ style.innerHTML = "\n .".concat(id, " {\n position: fixed;\n top: calc(50vh - 60px);\n left: calc(50vw - 60px);\n width: 120px;\n height: 120px;\n z-index: 8000;\n background: rgba(0, 0, 0, 0.6);\n border-radius: 8px;\n text-align: center;\n color: white;\n padding-top: 20px;\n }\n .").concat(id, " img {\n width: 50px;\n margin-bottom: 10px;\n }");
126
+ document.head.appendChild(style);
127
+ }
128
+ dom.innerHTML = "\n ".concat(config.hasMask ? '<div class="mask-wrapper" style="background-color: '.concat(config.maskColor, '"></div>') : "", '\n <div class="loading-wrapper">\n <div class="loading-content">\n <img src="https://img.alicdn.com/tfs/TB1bnUsQBLoK1RjSZFuXXXn0XXa-32-32.svg" alt="加载中">\n <div>').concat(text).concat(config.cancelInline ? " " : "</div>", "\n ").concat(config.onCancel ? '<a href="javascript:;" class="cancel">取消</a>' : "", "\n ").concat(config.cancelInline ? "</div>" : "", "\n </div>\n </div>");
129
+ if (config.onCancel) {
130
+ var btn = dom.querySelector(".cancel");
131
+ btn && btn.addEventListener("click", function() {
132
+ _this.hideLoading();
133
+ config.onCancel();
134
+ });
135
+ }
136
+ dom.style.display = "block";
137
+ if (seconds > 0) window[timeoutKey] = setTimeout(function() {
138
+ _this.hideLoading();
139
+ }, seconds * 1000);
140
+ },
141
+ // 隐藏全局loading
142
+ hideLoading: function hideLoading() {
143
+ var id = "com_global_page_loading";
144
+ var loading = document.getElementById(id);
145
+ if (loading) loading.style.display = "none";
146
+ },
147
+ /**
148
+ * 从URL中获取某个参数,如果不存在返回 undefined ,如果存在多个同名参数,返回第一个匹配值
149
+ * getParam('a', '?a=1&b=&c=3&c=33#abc') // '1'
150
+ * getParam('b', '?a=1&b=&c=3&c=33#abc') // ''
151
+ * getParam('c', '?a=1&b=&c=3&c=33#abc') // 3
152
+ * getParam('d', '?a=1&b=&c=3&c=33#abc') // undefined
153
+ * @param {*} name 参数名
154
+ * @param {*} url 要获取的URL,默认当前地址
155
+ */ getParam: function getParam(name) {
156
+ var url = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : location.search;
157
+ return (new RegExp("(^|\\?|&)".concat(name, "=(.*?)(?=&|#|$)"), "g").exec(url) || [])[2];
158
+ },
159
+ /**
160
+ * 从URL中获取int参数
161
+ * @param {*} name 参数名
162
+ * @param {*} url 要获取的URL,默认当前地址
163
+ */ getParamInt: function getParamInt(name) {
164
+ var url = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : location.search;
165
+ return parseInt(this.getParam(name, url) || "0", 10);
166
+ },
167
+ /**
168
+ * 获取某个URL的全部参数
169
+ * getParams('?a=1&b=2#cc') // {a: '1', b: '2'}
170
+ * @param url
171
+ * @returns 参数对象
172
+ */ getParams: function getParams() {
173
+ var url = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : location.search;
174
+ var search = ((url || "").split("?").pop() || "").split("#")[0] || "";
175
+ var params = {};
176
+ search.split("&").map(function(item) {
177
+ return item.split("=");
178
+ }).forEach(function(param) {
179
+ var _param = _slicedToArray(param, 2), key = _param[0], value = _param[1];
180
+ params[key] = value || "";
181
+ });
182
+ return params;
183
+ },
184
+ /**
185
+ * 给URL设置参数,如果已经存在,替换之,兼容hash存在的情况
186
+ * setParam('a', '123', '?a=1&b=2&a=3#d') // '?a=123&b=2&a=123#d'
187
+ * setParam('d', '444', '?a=1&b=2&a=3#d') // '?a=1&b=2&a=3&d=444#d'
188
+ * @param {Object} name 参数名
189
+ * @param {Object} value 参数值
190
+ * @param {Object} url 如果不传默认当前页面URL
191
+ */ setParam: function setParam(name, value, url) {
192
+ url = url || "".concat(location.pathname).concat(location.search);
193
+ // 如果参数已经存在,替换之
194
+ if (this.getParam(name, url) !== undefined) return url.replace(new RegExp("(^|\\?|&)".concat(name, "=(.*?)(?=&|#|$)"), "g"), "$1".concat(name, "=").concat(value));
195
+ var _url_split = _slicedToArray(url.split("#"), 2), pathname = _url_split[0], hash = _url_split[1]; // 处理存在hash的情况
196
+ return "".concat(pathname).concat(pathname.indexOf("?") < 0 ? "?" : "&").concat(name, "=").concat(value).concat(hash ? "#" : "").concat(hash || "");
197
+ },
198
+ /**
199
+ * 删除URL中某个参数
200
+ * delParam('a', '?a=1&b=2&a=3#d') // '?b=2#d'
201
+ * delParam('b', '?a=1&b=2&a=3#d') // '?a=1&a=3#d'
202
+ * delParam('a', '?a=1#d') // '#d'
203
+ * @param name 参数名
204
+ * @param url 要删除的URL,默认当前页面URL
205
+ * @returns 处理完后的URL
206
+ */ delParam: function delParam(name, url) {
207
+ url = url || "".concat(location.pathname).concat(location.search);
208
+ return url.replace(new RegExp("(^|\\?|&)".concat(name, "=.*?(&|#|$)"), "g"), function(_m, $1, $2) {
209
+ return $2 === "&" ? $1 : $2;
210
+ });
211
+ },
212
+ /**
213
+ * 休息一段时间,单位毫秒
214
+ * 示例:await sleep(200); // 休息200毫秒
215
+ * @param time 要休息的时间,单位毫秒,不传默认0
216
+ * @returns
217
+ */ sleep: function(time) {
218
+ return new Promise(function(resolve) {
219
+ return setTimeout(resolve, time || 0);
220
+ });
221
+ },
222
+ /**
223
+ * 基于JSON的简单深拷贝
224
+ * @param obj 要复制的对象,非对象格式会直接返回
225
+ * @returns
226
+ */ deepCopy: function(obj) {
227
+ if (!obj || typeof obj !== "object") return obj;
228
+ return JSON.parse(JSON.stringify(obj));
229
+ },
230
+ /**
231
+ * HTML编码,例如将 【"】 变成 【&quot;】
232
+ * @param {*} html 待编码的原始字符串,如果传入对象会遍历处理
233
+ * @returns
234
+ */ encodeHtml: function encodeHtml(html) {
235
+ if (typeof html === "string") {
236
+ var div = document.createElement("div");
237
+ div.innerText = html;
238
+ return div.innerHTML;
239
+ } else if (typeof html === "object" && html) for(var i in html)html[i] = this.encodeHtml(html[i]);
240
+ return html;
241
+ },
242
+ /**
243
+ * HTML解码,例如将 【&quot;】 变成 【"】
244
+ * @param {*} html 已经被HTML编码过的字符串,如果传入对象会遍历处理
245
+ * @returns
246
+ */ decodeHtml: function decodeHtml(html) {
247
+ if (typeof html === "string") {
248
+ var div = document.createElement("div");
249
+ div.innerHTML = html;
250
+ return div.innerText;
251
+ } else if (typeof html === "object" && html) for(var i in html)html[i] = this.decodeHtml(html[i]);
252
+ return html;
253
+ },
254
+ /**
255
+ * 将一个普通对象转为 a=1&b=2 的URL格式,会自动过滤undefined的值
256
+ * @param data 一个普通对象,如果对象嵌对象则会被自动转为JSON
257
+ * @returns 返回类似 a=1&b=2 的字符串
258
+ */ toUrlParams: function toUrlParams(data) {
259
+ return Object.keys(data || {}).filter(function(key) {
260
+ return data[key] !== undefined;
261
+ }).map(function(key) {
262
+ var value = typeof data[key] === "object" ? JSON.stringify(data[key]) : data[key];
263
+ return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));
264
+ }).join("&");
265
+ }
266
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "youtil",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "油梯,一个与框架、环境无关的小巧、精简、实用的JavaScript工具库",
5
5
  "files": [
6
6
  "esm",
@@ -42,13 +42,12 @@
42
42
  "youtil"
43
43
  ],
44
44
  "dependencies": {
45
- "@ice/pkg-plugin-docusaurus": "^1.4.18",
46
- "@swc/helpers": "^0.4.14"
45
+ "@swc/helpers": "0.4.14"
47
46
  },
48
47
  "devDependencies": {
49
48
  "@ice/jsx-runtime": "^0.2.0",
50
- "@ice/pkg": "^1.5.5",
51
- "@ice/pkg-plugin-docusaurus": "^1.4.10",
49
+ "@ice/pkg": "1.5.5",
50
+ "@ice/pkg-plugin-docusaurus": "^1.4.18",
52
51
  "@iceworks/spec": "^1.0.0",
53
52
  "eslint": "^7.0.0",
54
53
  "jest": "^29.5.0",