utiljs-box 1.0.0
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 +210 -0
- package/dist/index.d.mts +23 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +58 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
# utiljs-box
|
|
2
|
+
|
|
3
|
+
一个轻量级的 TypeScript 工具函数库,提供常用的实用工具,让开发更高效。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- ✅ TypeScript 编写,完整的类型定义
|
|
8
|
+
- ✅ 支持 ESM 和 CommonJS 双格式
|
|
9
|
+
- ✅ 按需加载,减小打包体积
|
|
10
|
+
- ✅ 100% 测试覆盖率
|
|
11
|
+
- ✅ 简洁易用的 API
|
|
12
|
+
- ✅ 支持浏览器和 Node.js 环境
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# 使用 yarn
|
|
18
|
+
yarn add utiljs-box
|
|
19
|
+
|
|
20
|
+
# 使用 npm
|
|
21
|
+
npm install utiljs-box
|
|
22
|
+
|
|
23
|
+
# 使用 pnpm
|
|
24
|
+
pnpm add utiljs-box
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 使用
|
|
28
|
+
|
|
29
|
+
```javascript
|
|
30
|
+
// ESM
|
|
31
|
+
import { tryJosn, sleep, removeNull } from 'utiljs-box'
|
|
32
|
+
|
|
33
|
+
// CommonJS
|
|
34
|
+
const { tryJosn, sleep, removeNull } = require('utiljs-box')
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## API 文档
|
|
38
|
+
|
|
39
|
+
### 1. tryJosn
|
|
40
|
+
|
|
41
|
+
安全解析 JSON 字符串,避免解析失败抛出异常。
|
|
42
|
+
|
|
43
|
+
**类型**:
|
|
44
|
+
```typescript
|
|
45
|
+
<T>(str: string, defaultValue?: T): T | null
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**参数**:
|
|
49
|
+
- `str`:要解析的 JSON 字符串
|
|
50
|
+
- `defaultValue`:解析失败时返回的默认值,默认为 `null`
|
|
51
|
+
|
|
52
|
+
**返回值**:
|
|
53
|
+
- 解析成功返回解析后的对象
|
|
54
|
+
- 解析失败返回默认值
|
|
55
|
+
|
|
56
|
+
**示例**:
|
|
57
|
+
```javascript
|
|
58
|
+
const { tryJosn } = require('utiljs-box')
|
|
59
|
+
|
|
60
|
+
const jsonStr = '{"name": "张三", "age": 18}'
|
|
61
|
+
const invalidJson = '{"name": "张三", "age": 18,'
|
|
62
|
+
|
|
63
|
+
console.log(tryJosn(jsonStr)) // { name: '张三', age: 18 }
|
|
64
|
+
console.log(tryJosn(invalidJson)) // null
|
|
65
|
+
console.log(tryJosn(invalidJson, { name: '默认名称' })) // { name: '默认名称' }
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 2. sleep
|
|
69
|
+
|
|
70
|
+
异步延迟函数,返回一个 Promise,用于在异步函数中等待指定时间。
|
|
71
|
+
|
|
72
|
+
**类型**:
|
|
73
|
+
```typescript
|
|
74
|
+
(ms: number): Promise<void>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
**参数**:
|
|
78
|
+
- `ms`:延迟的毫秒数
|
|
79
|
+
|
|
80
|
+
**返回值**:
|
|
81
|
+
- Promise 对象
|
|
82
|
+
|
|
83
|
+
**示例**:
|
|
84
|
+
```javascript
|
|
85
|
+
const { sleep } = require('utiljs-box')
|
|
86
|
+
|
|
87
|
+
async function demo() {
|
|
88
|
+
console.log('开始执行')
|
|
89
|
+
await sleep(1000) // 延迟 1 秒
|
|
90
|
+
console.log('1 秒后执行')
|
|
91
|
+
await sleep(2000) // 延迟 2 秒
|
|
92
|
+
console.log('总共延迟 3 秒')
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
demo()
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### 3. removeNull
|
|
99
|
+
|
|
100
|
+
移除对象中所有值为 `null` 的属性,支持嵌套对象。
|
|
101
|
+
|
|
102
|
+
**注意**:数组中的 `null` 值不会被移除。
|
|
103
|
+
|
|
104
|
+
**类型**:
|
|
105
|
+
```typescript
|
|
106
|
+
(obj: any): any
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**参数**:
|
|
110
|
+
- `obj`:要处理的对象
|
|
111
|
+
|
|
112
|
+
**返回值**:
|
|
113
|
+
- 移除 `null` 值后的新对象
|
|
114
|
+
|
|
115
|
+
**示例**:
|
|
116
|
+
```javascript
|
|
117
|
+
const { removeNull } = require('utiljs-box')
|
|
118
|
+
|
|
119
|
+
const data = {
|
|
120
|
+
name: '张三',
|
|
121
|
+
age: 18,
|
|
122
|
+
address: null,
|
|
123
|
+
contacts: {
|
|
124
|
+
phone: '13800138000',
|
|
125
|
+
email: null,
|
|
126
|
+
wechat: 'zhangsan'
|
|
127
|
+
},
|
|
128
|
+
hobbies: ['篮球', null, '游泳', null, '编程'] // 数组中的 null 不会被移除
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
console.log(removeNull(data))
|
|
132
|
+
// {
|
|
133
|
+
// name: '张三',
|
|
134
|
+
// age: 18,
|
|
135
|
+
// contacts: {
|
|
136
|
+
// phone: '13800138000',
|
|
137
|
+
// wechat: 'zhangsan'
|
|
138
|
+
// },
|
|
139
|
+
// hobbies: ['篮球', null, '游泳', null, '编程']
|
|
140
|
+
// }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 示例
|
|
144
|
+
|
|
145
|
+
查看 `examples` 目录下的示例文件:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# 运行 JavaScript 示例
|
|
149
|
+
node examples/main.js
|
|
150
|
+
|
|
151
|
+
# 运行 TypeScript 示例
|
|
152
|
+
# 先安装 ts-node
|
|
153
|
+
# npm install -g ts-node
|
|
154
|
+
# ts-node examples/main.ts
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 开发
|
|
158
|
+
|
|
159
|
+
### 安装依赖
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
yarn install
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 运行测试
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
yarn test
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### 构建
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
yarn build
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### 开发模式
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
yarn dev
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 测试覆盖率
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
-------------------|---------|----------|---------|---------|-------------------
|
|
187
|
+
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
|
|
188
|
+
-------------------|---------|----------|---------|---------|-------------------
|
|
189
|
+
All files | 100 | 93.75 | 100 | 100 |
|
|
190
|
+
sleep.ts | 100 | 100 | 100 | 100 |
|
|
191
|
+
tryJson.ts | 100 | 100 | 100 | 100 |
|
|
192
|
+
removeNull.ts | 100 | 91.66 | 100 | 100 | 18
|
|
193
|
+
-------------------|---------|----------|---------|---------|-------------------
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## 许可证
|
|
197
|
+
|
|
198
|
+
MIT
|
|
199
|
+
|
|
200
|
+
## 贡献
|
|
201
|
+
|
|
202
|
+
欢迎提交 Issue 和 Pull Request!
|
|
203
|
+
|
|
204
|
+
## 作者
|
|
205
|
+
|
|
206
|
+
hyc
|
|
207
|
+
|
|
208
|
+
## 仓库地址
|
|
209
|
+
|
|
210
|
+
https://github.com/hyc8801/utilbox
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 尝试解析 JSON 字符串
|
|
3
|
+
* @param str 要解析的 JSON 字符串
|
|
4
|
+
* @param defaultValue 如果解析失败,返回的默认值
|
|
5
|
+
* @returns 解析后的对象或默认值
|
|
6
|
+
*/
|
|
7
|
+
declare const tryJosn: <T = any>(str: string, defaultValue?: T) => T | null;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 延迟指定毫秒数的异步函数
|
|
11
|
+
* @param ms 延迟的毫秒数
|
|
12
|
+
* @returns Promise<void>
|
|
13
|
+
*/
|
|
14
|
+
declare const sleep: (ms: number) => Promise<void>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 移除对象中所有值为 null 的属性
|
|
18
|
+
* @param obj 要处理的对象
|
|
19
|
+
* @returns 移除 null 值后的新对象
|
|
20
|
+
*/
|
|
21
|
+
declare const removeNull: <T = any>(obj: T) => T;
|
|
22
|
+
|
|
23
|
+
export { removeNull, sleep, tryJosn };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 尝试解析 JSON 字符串
|
|
3
|
+
* @param str 要解析的 JSON 字符串
|
|
4
|
+
* @param defaultValue 如果解析失败,返回的默认值
|
|
5
|
+
* @returns 解析后的对象或默认值
|
|
6
|
+
*/
|
|
7
|
+
declare const tryJosn: <T = any>(str: string, defaultValue?: T) => T | null;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 延迟指定毫秒数的异步函数
|
|
11
|
+
* @param ms 延迟的毫秒数
|
|
12
|
+
* @returns Promise<void>
|
|
13
|
+
*/
|
|
14
|
+
declare const sleep: (ms: number) => Promise<void>;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 移除对象中所有值为 null 的属性
|
|
18
|
+
* @param obj 要处理的对象
|
|
19
|
+
* @returns 移除 null 值后的新对象
|
|
20
|
+
*/
|
|
21
|
+
declare const removeNull: <T = any>(obj: T) => T;
|
|
22
|
+
|
|
23
|
+
export { removeNull, sleep, tryJosn };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
8
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
9
|
+
var __spreadValues = (a, b) => {
|
|
10
|
+
for (var prop in b || (b = {}))
|
|
11
|
+
if (__hasOwnProp.call(b, prop))
|
|
12
|
+
__defNormalProp(a, prop, b[prop]);
|
|
13
|
+
if (__getOwnPropSymbols)
|
|
14
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
15
|
+
if (__propIsEnum.call(b, prop))
|
|
16
|
+
__defNormalProp(a, prop, b[prop]);
|
|
17
|
+
}
|
|
18
|
+
return a;
|
|
19
|
+
};
|
|
20
|
+
var __export = (target, all) => {
|
|
21
|
+
for (var name in all)
|
|
22
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
23
|
+
};
|
|
24
|
+
var __copyProps = (to, from, except, desc) => {
|
|
25
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
26
|
+
for (let key of __getOwnPropNames(from))
|
|
27
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
28
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
29
|
+
}
|
|
30
|
+
return to;
|
|
31
|
+
};
|
|
32
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
33
|
+
|
|
34
|
+
// src/index.ts
|
|
35
|
+
var index_exports = {};
|
|
36
|
+
__export(index_exports, {
|
|
37
|
+
removeNull: () => removeNull,
|
|
38
|
+
sleep: () => sleep,
|
|
39
|
+
tryJosn: () => tryJosn
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(index_exports);
|
|
42
|
+
|
|
43
|
+
// src/utils/tryJson.ts
|
|
44
|
+
var tryJosn = (str, defaultValue) => {
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(str);
|
|
47
|
+
} catch (error) {
|
|
48
|
+
return defaultValue != null ? defaultValue : null;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// src/utils/sleep.ts
|
|
53
|
+
var sleep = (ms) => {
|
|
54
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// src/utils/removeNull.ts
|
|
58
|
+
var removeNull = (obj) => {
|
|
59
|
+
if (typeof obj !== "object" || obj === null) {
|
|
60
|
+
return obj;
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(obj)) {
|
|
63
|
+
return obj;
|
|
64
|
+
}
|
|
65
|
+
const result = __spreadValues({}, obj);
|
|
66
|
+
for (const key in result) {
|
|
67
|
+
if (result.hasOwnProperty(key)) {
|
|
68
|
+
const value = result[key];
|
|
69
|
+
if (value === null) {
|
|
70
|
+
delete result[key];
|
|
71
|
+
} else if (typeof value === "object") {
|
|
72
|
+
result[key] = removeNull(value);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
};
|
|
78
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
79
|
+
0 && (module.exports = {
|
|
80
|
+
removeNull,
|
|
81
|
+
sleep,
|
|
82
|
+
tryJosn
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/tryJson.ts","../src/utils/sleep.ts","../src/utils/removeNull.ts"],"sourcesContent":["export { tryJosn } from './utils/tryJson'\nexport { sleep } from './utils/sleep'\nexport { removeNull } from './utils/removeNull'","/**\r\n * 尝试解析 JSON 字符串\r\n * @param str 要解析的 JSON 字符串\r\n * @param defaultValue 如果解析失败,返回的默认值\r\n * @returns 解析后的对象或默认值\r\n */\r\nexport const tryJosn = <T = any>(str: string, defaultValue?: T ): T | null => {\r\n try {\r\n return JSON.parse(str)\r\n } catch (error) {\r\n return defaultValue ?? null\r\n }\r\n}\r\n\r\n\r\nexport default tryJosn\r\n","/**\n * 延迟指定毫秒数的异步函数\n * @param ms 延迟的毫秒数\n * @returns Promise<void>\n */\nexport const sleep = (ms: number): Promise<void> => {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport default sleep","/**\n * 移除对象中所有值为 null 的属性\n * @param obj 要处理的对象\n * @returns 移除 null 值后的新对象\n */\nexport const removeNull = <T = any>(obj: T): T => {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj\n }\n\n const result = { ...obj }\n\n for (const key in result) {\n if (result.hasOwnProperty(key)) {\n const value = result[key]\n \n if (value === null) {\n delete result[key]\n } else if (typeof value === 'object') {\n result[key] = removeNull(value)\n }\n }\n }\n\n return result\n}\n\nexport default removeNull"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,UAAU,CAAU,KAAa,iBAAgC;AAC5E,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,SAAS,OAAO;AACd,WAAO,sCAAgB;AAAA,EACzB;AACF;;;ACPO,IAAM,QAAQ,CAAC,OAA8B;AAClD,SAAO,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACvD;;;ACFO,IAAM,aAAa,CAAU,QAAc;AAChD,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,mBAAK;AAEpB,aAAW,OAAO,QAAQ;AACxB,QAAI,OAAO,eAAe,GAAG,GAAG;AAC9B,YAAM,QAAQ,OAAO,GAAG;AAExB,UAAI,UAAU,MAAM;AAClB,eAAO,OAAO,GAAG;AAAA,MACnB,WAAW,OAAO,UAAU,UAAU;AACpC,eAAO,GAAG,IAAI,WAAW,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
3
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
4
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
5
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
6
|
+
var __spreadValues = (a, b) => {
|
|
7
|
+
for (var prop in b || (b = {}))
|
|
8
|
+
if (__hasOwnProp.call(b, prop))
|
|
9
|
+
__defNormalProp(a, prop, b[prop]);
|
|
10
|
+
if (__getOwnPropSymbols)
|
|
11
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
12
|
+
if (__propIsEnum.call(b, prop))
|
|
13
|
+
__defNormalProp(a, prop, b[prop]);
|
|
14
|
+
}
|
|
15
|
+
return a;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// src/utils/tryJson.ts
|
|
19
|
+
var tryJosn = (str, defaultValue) => {
|
|
20
|
+
try {
|
|
21
|
+
return JSON.parse(str);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
return defaultValue != null ? defaultValue : null;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// src/utils/sleep.ts
|
|
28
|
+
var sleep = (ms) => {
|
|
29
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// src/utils/removeNull.ts
|
|
33
|
+
var removeNull = (obj) => {
|
|
34
|
+
if (typeof obj !== "object" || obj === null) {
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(obj)) {
|
|
38
|
+
return obj;
|
|
39
|
+
}
|
|
40
|
+
const result = __spreadValues({}, obj);
|
|
41
|
+
for (const key in result) {
|
|
42
|
+
if (result.hasOwnProperty(key)) {
|
|
43
|
+
const value = result[key];
|
|
44
|
+
if (value === null) {
|
|
45
|
+
delete result[key];
|
|
46
|
+
} else if (typeof value === "object") {
|
|
47
|
+
result[key] = removeNull(value);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
removeNull,
|
|
55
|
+
sleep,
|
|
56
|
+
tryJosn
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/tryJson.ts","../src/utils/sleep.ts","../src/utils/removeNull.ts"],"sourcesContent":["/**\r\n * 尝试解析 JSON 字符串\r\n * @param str 要解析的 JSON 字符串\r\n * @param defaultValue 如果解析失败,返回的默认值\r\n * @returns 解析后的对象或默认值\r\n */\r\nexport const tryJosn = <T = any>(str: string, defaultValue?: T ): T | null => {\r\n try {\r\n return JSON.parse(str)\r\n } catch (error) {\r\n return defaultValue ?? null\r\n }\r\n}\r\n\r\n\r\nexport default tryJosn\r\n","/**\n * 延迟指定毫秒数的异步函数\n * @param ms 延迟的毫秒数\n * @returns Promise<void>\n */\nexport const sleep = (ms: number): Promise<void> => {\n return new Promise(resolve => setTimeout(resolve, ms))\n}\n\nexport default sleep","/**\n * 移除对象中所有值为 null 的属性\n * @param obj 要处理的对象\n * @returns 移除 null 值后的新对象\n */\nexport const removeNull = <T = any>(obj: T): T => {\n if (typeof obj !== 'object' || obj === null) {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj\n }\n\n const result = { ...obj }\n\n for (const key in result) {\n if (result.hasOwnProperty(key)) {\n const value = result[key]\n \n if (value === null) {\n delete result[key]\n } else if (typeof value === 'object') {\n result[key] = removeNull(value)\n }\n }\n }\n\n return result\n}\n\nexport default removeNull"],"mappings":";;;;;;;;;;;;;;;;;;AAMO,IAAM,UAAU,CAAU,KAAa,iBAAgC;AAC5E,MAAI;AACF,WAAO,KAAK,MAAM,GAAG;AAAA,EACvB,SAAS,OAAO;AACd,WAAO,sCAAgB;AAAA,EACzB;AACF;;;ACPO,IAAM,QAAQ,CAAC,OAA8B;AAClD,SAAO,IAAI,QAAQ,aAAW,WAAW,SAAS,EAAE,CAAC;AACvD;;;ACFO,IAAM,aAAa,CAAU,QAAc;AAChD,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,mBAAK;AAEpB,aAAW,OAAO,QAAQ;AACxB,QAAI,OAAO,eAAe,GAAG,GAAG;AAC9B,YAAM,QAAQ,OAAO,GAAG;AAExB,UAAI,UAAU,MAAM;AAClB,eAAO,OAAO,GAAG;AAAA,MACnB,WAAW,OAAO,UAAU,UAAU;AACpC,eAAO,GAAG,IAAI,WAAW,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "utiljs-box",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"module": "dist/index.mjs",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsup",
|
|
9
|
+
"dev": "tsup --watch",
|
|
10
|
+
"test": "jest",
|
|
11
|
+
"prepublishOnly": "yarn build"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"typescript",
|
|
18
|
+
"utils",
|
|
19
|
+
"tryJson",
|
|
20
|
+
"sleep",
|
|
21
|
+
"removeNull"
|
|
22
|
+
],
|
|
23
|
+
"author": "hyc8868",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"description": "A collection of TypeScript utility functions",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/hyc8801/utilbox.git"
|
|
29
|
+
},
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/hyc8801/utilbox/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://github.com/hyc8801/utilbox#readme",
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/jest": "^30.0.0",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
|
37
|
+
"@typescript-eslint/parser": "^8.53.0",
|
|
38
|
+
"eslint": "^9.39.2",
|
|
39
|
+
"eslint-config-prettier": "^10.1.8",
|
|
40
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
41
|
+
"jest": "^30.2.0",
|
|
42
|
+
"prettier": "^3.8.0",
|
|
43
|
+
"ts-jest": "^29.4.6",
|
|
44
|
+
"tsup": "^8.5.1",
|
|
45
|
+
"typescript": "^5.9.3"
|
|
46
|
+
}
|
|
47
|
+
}
|