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 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
@@ -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 };
@@ -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
+ }