@zdepot/utils 1.0.0 → 1.0.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/dist/index.js +1 -218
- package/dist/index.mjs +1 -193
- package/package.json +4 -4
- package/dist/index.d.mts +0 -103
package/dist/index.js
CHANGED
|
@@ -1,218 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
default: () => index_default,
|
|
24
|
-
safe: () => safe
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(index_exports);
|
|
27
|
-
var MAX_JSON_LENGTH = 10 * 1024 * 1024;
|
|
28
|
-
var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
29
|
-
var JSON_OBJ_PREFIX = /^[\[{]/;
|
|
30
|
-
function getTypeTag(value) {
|
|
31
|
-
return Object.prototype.toString.call(value);
|
|
32
|
-
}
|
|
33
|
-
var safe = {
|
|
34
|
-
/**
|
|
35
|
-
* 判断相同类型
|
|
36
|
-
* @param a 第一个值
|
|
37
|
-
* @param b 第二个值
|
|
38
|
-
* @returns 是否为相同类型
|
|
39
|
-
*/
|
|
40
|
-
isSameType: function isSameType(a, b) {
|
|
41
|
-
return getTypeTag(a) === getTypeTag(b);
|
|
42
|
-
},
|
|
43
|
-
/**
|
|
44
|
-
* 确保返回数组。如果输入是数组则直接返回;如果是 JSON 字符串则自动 parse;否则返回空数组 `[]`。
|
|
45
|
-
* @param value 输入值
|
|
46
|
-
* @returns 数组或空数组
|
|
47
|
-
*/
|
|
48
|
-
array: function array(value) {
|
|
49
|
-
if (this.isSameType(value, [])) return value;
|
|
50
|
-
if (this.isSameType(value, ""))
|
|
51
|
-
return this.jsonParse(value, []);
|
|
52
|
-
return [];
|
|
53
|
-
},
|
|
54
|
-
/**
|
|
55
|
-
* 确保返回字符串。如果输入是字符串则直接返回,否则返回兜底值(默认 `""`)。
|
|
56
|
-
* @param value 输入值
|
|
57
|
-
* @param fallback 兜底值
|
|
58
|
-
* @returns 字符串或空字符串
|
|
59
|
-
*/
|
|
60
|
-
string: function string(value, fallback = "") {
|
|
61
|
-
if (typeof value === "string") return value;
|
|
62
|
-
return fallback != null ? fallback : "";
|
|
63
|
-
},
|
|
64
|
-
/**
|
|
65
|
-
* 确保返回数字。用 `Number()` 转换,如果结果为 NaN 则返回兜底值(默认 `0`)。
|
|
66
|
-
* @param value 输入值
|
|
67
|
-
* @param fallback 兜底值
|
|
68
|
-
* @returns 数字或兜底值
|
|
69
|
-
*/
|
|
70
|
-
number: function number(value, fallback = 0) {
|
|
71
|
-
const result = Number(value);
|
|
72
|
-
if (!Number.isFinite(result)) return Number.isFinite(fallback) ? fallback : 0;
|
|
73
|
-
return result;
|
|
74
|
-
},
|
|
75
|
-
/**
|
|
76
|
-
* 带兜底值的 `JSON.parse`。解析失败或结果类型与兜底值不一致时返回兜底值。
|
|
77
|
-
* @param value 输入值
|
|
78
|
-
* @param fallback 兜底值
|
|
79
|
-
* @returns 解析结果或兜底值
|
|
80
|
-
*/
|
|
81
|
-
jsonParse: function jsonParse(value, fallback) {
|
|
82
|
-
if (value == null) return fallback;
|
|
83
|
-
try {
|
|
84
|
-
const result = JSON.parse(value);
|
|
85
|
-
return this.isSameType(result, fallback) ? result : fallback;
|
|
86
|
-
} catch (error) {
|
|
87
|
-
return fallback;
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
/**
|
|
91
|
-
* 增版 `jsonParse`,只处理以 `[` 或 `{` 开头的字符串(对象/数组),否则直接返回兜底值。
|
|
92
|
-
* @param value 输入值
|
|
93
|
-
* @param fallback 兜底值
|
|
94
|
-
* @returns 解析结果或兜底值
|
|
95
|
-
*/
|
|
96
|
-
jsonParseObj: function jsonParseObj(value, fallback) {
|
|
97
|
-
if (typeof value !== "string" || value.length > MAX_JSON_LENGTH || value.length < 2) {
|
|
98
|
-
return fallback;
|
|
99
|
-
}
|
|
100
|
-
try {
|
|
101
|
-
if (!JSON_OBJ_PREFIX.test(value)) throw new Error();
|
|
102
|
-
const result = JSON.parse(value);
|
|
103
|
-
return this.isSameType(result, fallback) ? result : fallback;
|
|
104
|
-
} catch (error) {
|
|
105
|
-
return fallback;
|
|
106
|
-
}
|
|
107
|
-
},
|
|
108
|
-
/**
|
|
109
|
-
* 安全的 `String.split`。空字符串返回 `[]` 避免 `['']`,异常也返回 `[]`。
|
|
110
|
-
* @param value 输入值
|
|
111
|
-
* @param splitStr 分隔符
|
|
112
|
-
* @returns 分割结果或空数组
|
|
113
|
-
*/
|
|
114
|
-
split: function split(value, splitStr) {
|
|
115
|
-
if (typeof value !== "string" || value === "") return [];
|
|
116
|
-
try {
|
|
117
|
-
return value.split(splitStr);
|
|
118
|
-
} catch (error) {
|
|
119
|
-
return [];
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
/**
|
|
123
|
-
* 确保返回布尔值。真值返回 `true`,其他情况返回兜底值(默认 `false`)。
|
|
124
|
-
* @param value 输入值
|
|
125
|
-
* @param fallback 兜底值
|
|
126
|
-
* @returns 布尔值
|
|
127
|
-
*/
|
|
128
|
-
boolean: function boolean(value, fallback = false) {
|
|
129
|
-
if (value === true || String(value).toLowerCase() === "true" || value === 1) return true;
|
|
130
|
-
if (value === false || String(value).toLowerCase() === "false" || value === 0) return false;
|
|
131
|
-
return fallback;
|
|
132
|
-
},
|
|
133
|
-
/**
|
|
134
|
-
* 确保返回日期对象。如果是有效的时间戳、日期字符串或 Date 对象,返回对应的 Date,否则返回兜底值。
|
|
135
|
-
* @param value 输入值
|
|
136
|
-
* @param fallback 兜底值
|
|
137
|
-
* @returns 日期对象
|
|
138
|
-
*/
|
|
139
|
-
date: function date(value, fallback) {
|
|
140
|
-
const actualFallback = fallback != null ? fallback : /* @__PURE__ */ new Date();
|
|
141
|
-
if (value instanceof Date) return value;
|
|
142
|
-
if (typeof value === "number" || typeof value === "string") {
|
|
143
|
-
const d = new Date(value);
|
|
144
|
-
return isNaN(d.getTime()) ? actualFallback : d;
|
|
145
|
-
}
|
|
146
|
-
return actualFallback;
|
|
147
|
-
},
|
|
148
|
-
/**
|
|
149
|
-
* 确保返回函数。如果输入是函数则直接返回,否则返回空函数。
|
|
150
|
-
* @param value 输入值
|
|
151
|
-
* @param fallback 兜底值
|
|
152
|
-
* @returns 函数
|
|
153
|
-
*/
|
|
154
|
-
function: function(value, fallback = (() => void 0)) {
|
|
155
|
-
if (typeof value === "function") return value;
|
|
156
|
-
return fallback;
|
|
157
|
-
},
|
|
158
|
-
/**
|
|
159
|
-
* 确保返回非空字符串。如果是非空字符串则返回,否则返回兜底值。
|
|
160
|
-
* @param value 输入值
|
|
161
|
-
* @param fallback 兜底值
|
|
162
|
-
* @returns 非空字符串
|
|
163
|
-
*/
|
|
164
|
-
nonEmptyString: function nonEmptyString(value, fallback = "") {
|
|
165
|
-
const str = this.string(value, fallback);
|
|
166
|
-
return str.trim() !== "" ? str : fallback;
|
|
167
|
-
},
|
|
168
|
-
/**
|
|
169
|
-
* 确保返回有效的 email 字符串。如果是有效 email 则返回,否则返回兜底值。
|
|
170
|
-
* @param value 输入值
|
|
171
|
-
* @param fallback 兜底值
|
|
172
|
-
* @returns 有效的 email 字符串
|
|
173
|
-
*/
|
|
174
|
-
email: function email(value, fallback = "") {
|
|
175
|
-
const str = this.string(value, fallback);
|
|
176
|
-
return EMAIL_REGEX.test(str) ? str : fallback;
|
|
177
|
-
},
|
|
178
|
-
/**
|
|
179
|
-
* 确保返回有效的时间戳。如果是有效时间戳则返回,否则返回兜底值。
|
|
180
|
-
* @param value 输入值
|
|
181
|
-
* @param fallback 兜底值
|
|
182
|
-
* @returns 有效的时间戳
|
|
183
|
-
*/
|
|
184
|
-
timestamp: function timestamp(value, fallback = Date.now()) {
|
|
185
|
-
const date2 = this.date(value, new Date(fallback));
|
|
186
|
-
return date2.getTime();
|
|
187
|
-
},
|
|
188
|
-
/**
|
|
189
|
-
* 安全的 JSON 序列化。处理循环引用和不可序列化的值。
|
|
190
|
-
* @param value 要序列化的值
|
|
191
|
-
* @param indent 缩进
|
|
192
|
-
* @returns 序列化后的字符串
|
|
193
|
-
*/
|
|
194
|
-
jsonStringify: function jsonStringify(value, indent) {
|
|
195
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
196
|
-
try {
|
|
197
|
-
return JSON.stringify(
|
|
198
|
-
value,
|
|
199
|
-
(key, val) => {
|
|
200
|
-
if (typeof val === "function") return "[Function]";
|
|
201
|
-
if (typeof val === "object" && val !== null) {
|
|
202
|
-
if (seen.has(val)) return "[Circular]";
|
|
203
|
-
seen.add(val);
|
|
204
|
-
}
|
|
205
|
-
return val;
|
|
206
|
-
},
|
|
207
|
-
indent
|
|
208
|
-
);
|
|
209
|
-
} catch (error) {
|
|
210
|
-
return "{}";
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
var index_default = safe;
|
|
215
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
216
|
-
0 && (module.exports = {
|
|
217
|
-
safe
|
|
218
|
-
});
|
|
1
|
+
"use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var a=(e,n)=>{for(var t in n)o(e,t,{get:n[t],enumerable:!0})},p=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of g(n))!y.call(e,s)&&s!==t&&o(e,s,{get:()=>n[s],enumerable:!(r=c(n,s))||r.enumerable});return e};var T=e=>p(o({},"__esModule",{value:!0}),e);var d={};a(d,{default:()=>S,safe:()=>f});module.exports=T(d);var m=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,w=/^[\[{]/;function u(e){return Object.prototype.toString.call(e)}var f={isSameType:function(n,t){return u(n)===u(t)},array:function(n){return this.isSameType(n,[])?n:this.isSameType(n,"")?this.jsonParse(n,[]):[]},string:function(n,t=""){return typeof n=="string"?n:t??""},number:function(n,t=0){let r=Number(n);return Number.isFinite(r)?r:Number.isFinite(t)?t:0},jsonParse:function(n,t){if(n==null)return t;try{let r=JSON.parse(n);return this.isSameType(r,t)?r:t}catch{return t}},jsonParseObj:function(n,t){if(typeof n!="string"||n.length>10485760||n.length<2)return t;try{if(!w.test(n))throw new Error;let r=JSON.parse(n);return this.isSameType(r,t)?r:t}catch{return t}},split:function(n,t){if(typeof n!="string"||n==="")return[];try{return n.split(t)}catch{return[]}},boolean:function(n,t=!1){return n===!0||String(n).toLowerCase()==="true"||n===1?!0:n===!1||String(n).toLowerCase()==="false"||n===0?!1:t},date:function(n,t){let r=t??new Date;if(n instanceof Date)return n;if(typeof n=="number"||typeof n=="string"){let s=new Date(n);return isNaN(s.getTime())?r:s}return r},function:function(e,n=(()=>{})){return typeof e=="function"?e:n},nonEmptyString:function(n,t=""){let r=this.string(n,t);return r.trim()!==""?r:t},email:function(n,t=""){let r=this.string(n,t);return m.test(r)?r:t},timestamp:function(n,t=Date.now()){return this.date(n,new Date(t)).getTime()},jsonStringify:function(n,t){let r=new WeakSet;try{return JSON.stringify(n,(s,i)=>{if(typeof i=="function")return"[Function]";if(typeof i=="object"&&i!==null){if(r.has(i))return"[Circular]";r.add(i)}return i},t)}catch{return"{}"}}},S=f;0&&(module.exports={safe});
|
package/dist/index.mjs
CHANGED
|
@@ -1,193 +1 @@
|
|
|
1
|
-
|
|
2
|
-
var MAX_JSON_LENGTH = 10 * 1024 * 1024;
|
|
3
|
-
var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
4
|
-
var JSON_OBJ_PREFIX = /^[\[{]/;
|
|
5
|
-
function getTypeTag(value) {
|
|
6
|
-
return Object.prototype.toString.call(value);
|
|
7
|
-
}
|
|
8
|
-
var safe = {
|
|
9
|
-
/**
|
|
10
|
-
* 判断相同类型
|
|
11
|
-
* @param a 第一个值
|
|
12
|
-
* @param b 第二个值
|
|
13
|
-
* @returns 是否为相同类型
|
|
14
|
-
*/
|
|
15
|
-
isSameType: function isSameType(a, b) {
|
|
16
|
-
return getTypeTag(a) === getTypeTag(b);
|
|
17
|
-
},
|
|
18
|
-
/**
|
|
19
|
-
* 确保返回数组。如果输入是数组则直接返回;如果是 JSON 字符串则自动 parse;否则返回空数组 `[]`。
|
|
20
|
-
* @param value 输入值
|
|
21
|
-
* @returns 数组或空数组
|
|
22
|
-
*/
|
|
23
|
-
array: function array(value) {
|
|
24
|
-
if (this.isSameType(value, [])) return value;
|
|
25
|
-
if (this.isSameType(value, ""))
|
|
26
|
-
return this.jsonParse(value, []);
|
|
27
|
-
return [];
|
|
28
|
-
},
|
|
29
|
-
/**
|
|
30
|
-
* 确保返回字符串。如果输入是字符串则直接返回,否则返回兜底值(默认 `""`)。
|
|
31
|
-
* @param value 输入值
|
|
32
|
-
* @param fallback 兜底值
|
|
33
|
-
* @returns 字符串或空字符串
|
|
34
|
-
*/
|
|
35
|
-
string: function string(value, fallback = "") {
|
|
36
|
-
if (typeof value === "string") return value;
|
|
37
|
-
return fallback != null ? fallback : "";
|
|
38
|
-
},
|
|
39
|
-
/**
|
|
40
|
-
* 确保返回数字。用 `Number()` 转换,如果结果为 NaN 则返回兜底值(默认 `0`)。
|
|
41
|
-
* @param value 输入值
|
|
42
|
-
* @param fallback 兜底值
|
|
43
|
-
* @returns 数字或兜底值
|
|
44
|
-
*/
|
|
45
|
-
number: function number(value, fallback = 0) {
|
|
46
|
-
const result = Number(value);
|
|
47
|
-
if (!Number.isFinite(result)) return Number.isFinite(fallback) ? fallback : 0;
|
|
48
|
-
return result;
|
|
49
|
-
},
|
|
50
|
-
/**
|
|
51
|
-
* 带兜底值的 `JSON.parse`。解析失败或结果类型与兜底值不一致时返回兜底值。
|
|
52
|
-
* @param value 输入值
|
|
53
|
-
* @param fallback 兜底值
|
|
54
|
-
* @returns 解析结果或兜底值
|
|
55
|
-
*/
|
|
56
|
-
jsonParse: function jsonParse(value, fallback) {
|
|
57
|
-
if (value == null) return fallback;
|
|
58
|
-
try {
|
|
59
|
-
const result = JSON.parse(value);
|
|
60
|
-
return this.isSameType(result, fallback) ? result : fallback;
|
|
61
|
-
} catch (error) {
|
|
62
|
-
return fallback;
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
/**
|
|
66
|
-
* 增版 `jsonParse`,只处理以 `[` 或 `{` 开头的字符串(对象/数组),否则直接返回兜底值。
|
|
67
|
-
* @param value 输入值
|
|
68
|
-
* @param fallback 兜底值
|
|
69
|
-
* @returns 解析结果或兜底值
|
|
70
|
-
*/
|
|
71
|
-
jsonParseObj: function jsonParseObj(value, fallback) {
|
|
72
|
-
if (typeof value !== "string" || value.length > MAX_JSON_LENGTH || value.length < 2) {
|
|
73
|
-
return fallback;
|
|
74
|
-
}
|
|
75
|
-
try {
|
|
76
|
-
if (!JSON_OBJ_PREFIX.test(value)) throw new Error();
|
|
77
|
-
const result = JSON.parse(value);
|
|
78
|
-
return this.isSameType(result, fallback) ? result : fallback;
|
|
79
|
-
} catch (error) {
|
|
80
|
-
return fallback;
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
/**
|
|
84
|
-
* 安全的 `String.split`。空字符串返回 `[]` 避免 `['']`,异常也返回 `[]`。
|
|
85
|
-
* @param value 输入值
|
|
86
|
-
* @param splitStr 分隔符
|
|
87
|
-
* @returns 分割结果或空数组
|
|
88
|
-
*/
|
|
89
|
-
split: function split(value, splitStr) {
|
|
90
|
-
if (typeof value !== "string" || value === "") return [];
|
|
91
|
-
try {
|
|
92
|
-
return value.split(splitStr);
|
|
93
|
-
} catch (error) {
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
/**
|
|
98
|
-
* 确保返回布尔值。真值返回 `true`,其他情况返回兜底值(默认 `false`)。
|
|
99
|
-
* @param value 输入值
|
|
100
|
-
* @param fallback 兜底值
|
|
101
|
-
* @returns 布尔值
|
|
102
|
-
*/
|
|
103
|
-
boolean: function boolean(value, fallback = false) {
|
|
104
|
-
if (value === true || String(value).toLowerCase() === "true" || value === 1) return true;
|
|
105
|
-
if (value === false || String(value).toLowerCase() === "false" || value === 0) return false;
|
|
106
|
-
return fallback;
|
|
107
|
-
},
|
|
108
|
-
/**
|
|
109
|
-
* 确保返回日期对象。如果是有效的时间戳、日期字符串或 Date 对象,返回对应的 Date,否则返回兜底值。
|
|
110
|
-
* @param value 输入值
|
|
111
|
-
* @param fallback 兜底值
|
|
112
|
-
* @returns 日期对象
|
|
113
|
-
*/
|
|
114
|
-
date: function date(value, fallback) {
|
|
115
|
-
const actualFallback = fallback != null ? fallback : /* @__PURE__ */ new Date();
|
|
116
|
-
if (value instanceof Date) return value;
|
|
117
|
-
if (typeof value === "number" || typeof value === "string") {
|
|
118
|
-
const d = new Date(value);
|
|
119
|
-
return isNaN(d.getTime()) ? actualFallback : d;
|
|
120
|
-
}
|
|
121
|
-
return actualFallback;
|
|
122
|
-
},
|
|
123
|
-
/**
|
|
124
|
-
* 确保返回函数。如果输入是函数则直接返回,否则返回空函数。
|
|
125
|
-
* @param value 输入值
|
|
126
|
-
* @param fallback 兜底值
|
|
127
|
-
* @returns 函数
|
|
128
|
-
*/
|
|
129
|
-
function: function(value, fallback = (() => void 0)) {
|
|
130
|
-
if (typeof value === "function") return value;
|
|
131
|
-
return fallback;
|
|
132
|
-
},
|
|
133
|
-
/**
|
|
134
|
-
* 确保返回非空字符串。如果是非空字符串则返回,否则返回兜底值。
|
|
135
|
-
* @param value 输入值
|
|
136
|
-
* @param fallback 兜底值
|
|
137
|
-
* @returns 非空字符串
|
|
138
|
-
*/
|
|
139
|
-
nonEmptyString: function nonEmptyString(value, fallback = "") {
|
|
140
|
-
const str = this.string(value, fallback);
|
|
141
|
-
return str.trim() !== "" ? str : fallback;
|
|
142
|
-
},
|
|
143
|
-
/**
|
|
144
|
-
* 确保返回有效的 email 字符串。如果是有效 email 则返回,否则返回兜底值。
|
|
145
|
-
* @param value 输入值
|
|
146
|
-
* @param fallback 兜底值
|
|
147
|
-
* @returns 有效的 email 字符串
|
|
148
|
-
*/
|
|
149
|
-
email: function email(value, fallback = "") {
|
|
150
|
-
const str = this.string(value, fallback);
|
|
151
|
-
return EMAIL_REGEX.test(str) ? str : fallback;
|
|
152
|
-
},
|
|
153
|
-
/**
|
|
154
|
-
* 确保返回有效的时间戳。如果是有效时间戳则返回,否则返回兜底值。
|
|
155
|
-
* @param value 输入值
|
|
156
|
-
* @param fallback 兜底值
|
|
157
|
-
* @returns 有效的时间戳
|
|
158
|
-
*/
|
|
159
|
-
timestamp: function timestamp(value, fallback = Date.now()) {
|
|
160
|
-
const date2 = this.date(value, new Date(fallback));
|
|
161
|
-
return date2.getTime();
|
|
162
|
-
},
|
|
163
|
-
/**
|
|
164
|
-
* 安全的 JSON 序列化。处理循环引用和不可序列化的值。
|
|
165
|
-
* @param value 要序列化的值
|
|
166
|
-
* @param indent 缩进
|
|
167
|
-
* @returns 序列化后的字符串
|
|
168
|
-
*/
|
|
169
|
-
jsonStringify: function jsonStringify(value, indent) {
|
|
170
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
171
|
-
try {
|
|
172
|
-
return JSON.stringify(
|
|
173
|
-
value,
|
|
174
|
-
(key, val) => {
|
|
175
|
-
if (typeof val === "function") return "[Function]";
|
|
176
|
-
if (typeof val === "object" && val !== null) {
|
|
177
|
-
if (seen.has(val)) return "[Circular]";
|
|
178
|
-
seen.add(val);
|
|
179
|
-
}
|
|
180
|
-
return val;
|
|
181
|
-
},
|
|
182
|
-
indent
|
|
183
|
-
);
|
|
184
|
-
} catch (error) {
|
|
185
|
-
return "{}";
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
var index_default = safe;
|
|
190
|
-
export {
|
|
191
|
-
index_default as default,
|
|
192
|
-
safe
|
|
193
|
-
};
|
|
1
|
+
var u=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,f=/^[\[{]/;function o(e){return Object.prototype.toString.call(e)}var c={isSameType:function(n,t){return o(n)===o(t)},array:function(n){return this.isSameType(n,[])?n:this.isSameType(n,"")?this.jsonParse(n,[]):[]},string:function(n,t=""){return typeof n=="string"?n:t??""},number:function(n,t=0){let r=Number(n);return Number.isFinite(r)?r:Number.isFinite(t)?t:0},jsonParse:function(n,t){if(n==null)return t;try{let r=JSON.parse(n);return this.isSameType(r,t)?r:t}catch{return t}},jsonParseObj:function(n,t){if(typeof n!="string"||n.length>10485760||n.length<2)return t;try{if(!f.test(n))throw new Error;let r=JSON.parse(n);return this.isSameType(r,t)?r:t}catch{return t}},split:function(n,t){if(typeof n!="string"||n==="")return[];try{return n.split(t)}catch{return[]}},boolean:function(n,t=!1){return n===!0||String(n).toLowerCase()==="true"||n===1?!0:n===!1||String(n).toLowerCase()==="false"||n===0?!1:t},date:function(n,t){let r=t??new Date;if(n instanceof Date)return n;if(typeof n=="number"||typeof n=="string"){let i=new Date(n);return isNaN(i.getTime())?r:i}return r},function:function(e,n=(()=>{})){return typeof e=="function"?e:n},nonEmptyString:function(n,t=""){let r=this.string(n,t);return r.trim()!==""?r:t},email:function(n,t=""){let r=this.string(n,t);return u.test(r)?r:t},timestamp:function(n,t=Date.now()){return this.date(n,new Date(t)).getTime()},jsonStringify:function(n,t){let r=new WeakSet;try{return JSON.stringify(n,(i,s)=>{if(typeof s=="function")return"[Function]";if(typeof s=="object"&&s!==null){if(r.has(s))return"[Circular]";r.add(s)}return s},t)}catch{return"{}"}}},g=c;export{g as default,c as safe};
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zdepot/utils",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "安全类型转换工具库,提供带兜底值的类型判断与转换方法",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
10
11
|
"import": "./dist/index.mjs",
|
|
11
|
-
"require": "./dist/index.js"
|
|
12
|
-
"types": "./dist/index.d.ts"
|
|
12
|
+
"require": "./dist/index.js"
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"access": "public"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|
|
23
|
-
"build": "tsup
|
|
23
|
+
"build": "tsup --config tsup.config.ts && node scripts/clean-dmts.js",
|
|
24
24
|
"prepublishOnly": "npm run build",
|
|
25
25
|
"test": "vitest",
|
|
26
26
|
"test:coverage": "vitest run --coverage",
|
package/dist/index.d.mts
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
interface SafeUtils {
|
|
2
|
-
/**
|
|
3
|
-
* 判断相同类型
|
|
4
|
-
* @param a 第一个值
|
|
5
|
-
* @param b 第二个值
|
|
6
|
-
* @returns 是否为相同类型
|
|
7
|
-
*/
|
|
8
|
-
isSameType: (a: unknown, b: unknown) => boolean;
|
|
9
|
-
/**
|
|
10
|
-
* 确保返回数组。如果输入是数组则直接返回;如果是 JSON 字符串则自动 parse;否则返回空数组 `[]`。
|
|
11
|
-
* @param value 输入值
|
|
12
|
-
* @returns 数组或空数组
|
|
13
|
-
*/
|
|
14
|
-
array: <T = unknown>(value: T) => T extends readonly unknown[] ? T : [];
|
|
15
|
-
/**
|
|
16
|
-
* 确保返回字符串。如果输入是字符串则直接返回,否则返回兜底值(默认 `""`)。
|
|
17
|
-
* @param value 输入值
|
|
18
|
-
* @param fallback 兜底值
|
|
19
|
-
* @returns 字符串或空字符串
|
|
20
|
-
*/
|
|
21
|
-
string: (value: unknown, fallback?: string) => string;
|
|
22
|
-
/**
|
|
23
|
-
* 确保返回数字。用 `Number()` 转换,如果结果为 NaN 则返回兜底值(默认 `0`)。
|
|
24
|
-
* @param value 输入值
|
|
25
|
-
* @param fallback 兜底值
|
|
26
|
-
* @returns 数字或兜底值
|
|
27
|
-
*/
|
|
28
|
-
number: (value: unknown, fallback?: number) => number;
|
|
29
|
-
/**
|
|
30
|
-
* 带兜底值的 `JSON.parse`。解析失败或结果类型与兜底值不一致时返回兜底值。
|
|
31
|
-
* @param value 输入值
|
|
32
|
-
* @param fallback 兜底值
|
|
33
|
-
* @returns 解析结果或兜底值
|
|
34
|
-
*/
|
|
35
|
-
jsonParse: <T = unknown>(value: unknown, fallback: T) => T;
|
|
36
|
-
/**
|
|
37
|
-
* 增版 `jsonParse`,只处理以 `[` 或 `{` 开头的字符串(对象/数组),否则直接返回兜底值。
|
|
38
|
-
* @param value 输入值
|
|
39
|
-
* @param fallback 兜底值
|
|
40
|
-
* @returns 解析结果或兜底值
|
|
41
|
-
*/
|
|
42
|
-
jsonParseObj: <T extends Record<string, unknown> | unknown[]>(value: string, fallback: T) => T;
|
|
43
|
-
/**
|
|
44
|
-
* 安全的 `String.split`。空字符串返回 `[]` 避免 `['']`,异常也返回 `[]`。
|
|
45
|
-
* @param value 输入值
|
|
46
|
-
* @param splitStr 分隔符
|
|
47
|
-
* @returns 分割结果或空数组
|
|
48
|
-
*/
|
|
49
|
-
split: (value: string, splitStr: string) => string[];
|
|
50
|
-
/**
|
|
51
|
-
* 确保返回布尔值。真值返回 `true`,其他情况返回兜底值(默认 `false`)。
|
|
52
|
-
* @param value 输入值
|
|
53
|
-
* @param fallback 兜底值
|
|
54
|
-
* @returns 布尔值
|
|
55
|
-
*/
|
|
56
|
-
boolean: (value: unknown, fallback?: boolean) => boolean;
|
|
57
|
-
/**
|
|
58
|
-
* 确保返回日期对象。如果是有效的时间戳、日期字符串或 Date 对象,返回对应的 Date,否则返回兜底值。
|
|
59
|
-
* @param value 输入值
|
|
60
|
-
* @param fallback 兜底值
|
|
61
|
-
* @returns 日期对象
|
|
62
|
-
*/
|
|
63
|
-
date: (value: unknown, fallback?: Date) => Date;
|
|
64
|
-
/**
|
|
65
|
-
* 确保返回函数。如果输入是函数则直接返回,否则返回空函数。
|
|
66
|
-
* @param value 输入值
|
|
67
|
-
* @param fallback 兜底值
|
|
68
|
-
* @returns 函数
|
|
69
|
-
*/
|
|
70
|
-
function: <T extends (...args: any[]) => any>(value: unknown, fallback?: T) => T;
|
|
71
|
-
/**
|
|
72
|
-
* 确保返回非空字符串。如果是非空字符串则返回,否则返回兜底值。
|
|
73
|
-
* @param value 输入值
|
|
74
|
-
* @param fallback 兜底值
|
|
75
|
-
* @returns 非空字符串
|
|
76
|
-
*/
|
|
77
|
-
nonEmptyString: (value: unknown, fallback?: string) => string;
|
|
78
|
-
/**
|
|
79
|
-
* 确保返回有效的 email 字符串。如果是有效 email 则返回,否则返回兜底值。
|
|
80
|
-
* @param value 输入值
|
|
81
|
-
* @param fallback 兜底值
|
|
82
|
-
* @returns 有效的 email 字符串
|
|
83
|
-
*/
|
|
84
|
-
email: (value: unknown, fallback?: string) => string;
|
|
85
|
-
/**
|
|
86
|
-
* 确保返回有效的时间戳。如果是有效时间戳则返回,否则返回兜底值。
|
|
87
|
-
* @param value 输入值
|
|
88
|
-
* @param fallback 兜底值
|
|
89
|
-
* @returns 有效的时间戳
|
|
90
|
-
*/
|
|
91
|
-
timestamp: (value: unknown, fallback?: number) => number;
|
|
92
|
-
/**
|
|
93
|
-
* 安全的 JSON 序列化。处理循环引用和不可序列化的值。
|
|
94
|
-
* @param value 要序列化的值
|
|
95
|
-
* @param indent 缩进
|
|
96
|
-
* @returns 序列化后的字符串
|
|
97
|
-
*/
|
|
98
|
-
jsonStringify: (value: unknown, indent?: number) => string;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
declare const safe: SafeUtils;
|
|
102
|
-
|
|
103
|
-
export { type SafeUtils, safe as default, safe };
|