@nickyzj2023/utils 1.0.46 → 1.0.47
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/network.d.ts +12 -1
- package/dist/string.d.ts +33 -6
- package/docs/assets/highlight.css +99 -92
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/functions/camelToSnake.html +178 -178
- package/docs/functions/capitalize.html +178 -178
- package/docs/functions/compactStr.html +182 -182
- package/docs/functions/debounce.html +187 -187
- package/docs/functions/decapitalize.html +178 -178
- package/docs/functions/fetcher.html +189 -188
- package/docs/functions/getRealURL.html +175 -175
- package/docs/functions/imageUrlToBase64.html +187 -184
- package/docs/functions/isFalsy.html +178 -178
- package/docs/functions/isNil.html +178 -178
- package/docs/functions/isObject.html +178 -178
- package/docs/functions/isPrimitive.html +178 -178
- package/docs/functions/isTruthy.html +178 -178
- package/docs/functions/loopUntil.html +180 -180
- package/docs/functions/mapKeys.html +180 -180
- package/docs/functions/mapValues.html +182 -182
- package/docs/functions/mergeObjects.html +184 -184
- package/docs/functions/randomInt.html +178 -178
- package/docs/functions/sleep.html +179 -179
- package/docs/functions/snakeToCamel.html +178 -178
- package/docs/functions/throttle.html +187 -187
- package/docs/functions/timeLog.html +178 -178
- package/docs/functions/to.html +180 -180
- package/docs/functions/withCache.html +185 -185
- package/docs/modules.html +174 -174
- package/docs/types/CamelToSnake.html +174 -174
- package/docs/types/Capitalize.html +174 -174
- package/docs/types/Decapitalize.html +174 -174
- package/docs/types/DeepMapKeys.html +174 -174
- package/docs/types/DeepMapValues.html +174 -174
- package/docs/types/Falsy.html +174 -174
- package/docs/types/ImageCompressionOptions.html +184 -0
- package/docs/types/Primitive.html +174 -174
- package/docs/types/RequestInit.html +174 -174
- package/docs/types/SetTtl.html +174 -174
- package/docs/types/SnakeToCamel.html +174 -174
- package/package.json +11 -14
- package/dist/tsdoc-metadata.json +0 -11
package/dist/network.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
type BunFetchOptions = {
|
|
2
|
+
/** 代理服务器配置(仅 Bun 支持) */
|
|
3
|
+
proxy?: string;
|
|
4
|
+
};
|
|
5
|
+
export type RequestInit = globalThis.RequestInit & BunFetchOptions & {
|
|
2
6
|
params?: Record<string, any>;
|
|
3
7
|
parser?: (response: Response) => Promise<any>;
|
|
4
8
|
};
|
|
@@ -14,6 +18,7 @@ export type RequestInit = globalThis.RequestInit & {
|
|
|
14
18
|
* - 在 body 里传递对象,自动 JSON.stringify
|
|
15
19
|
* - 可选择使用 to() 转换请求结果为 [Error, Response]
|
|
16
20
|
* - 可选择使用 withCache() 缓存请求结果
|
|
21
|
+
* - 支持 proxy 选项(仅在 Bun 环境有效)
|
|
17
22
|
*
|
|
18
23
|
* @example
|
|
19
24
|
*
|
|
@@ -24,6 +29,11 @@ export type RequestInit = globalThis.RequestInit & {
|
|
|
24
29
|
* const api = fetcher("https://nickyzj.run:3030", { headers: { Authorization: "Bearer token" } });
|
|
25
30
|
* const res = await api.get<Blog>("/blogs/hello-world", { headers: {...}, params: { page: 1 } }); // 与实例相同的 headers 会覆盖上去,params 会转成 ?page=1 跟到 url 后面
|
|
26
31
|
*
|
|
32
|
+
* // 用法3:使用代理(仅 Bun 环境)
|
|
33
|
+
* const api = fetcher("https://api.example.com", {
|
|
34
|
+
* proxy: "http://127.0.0.1:7890"
|
|
35
|
+
* });
|
|
36
|
+
*
|
|
27
37
|
* // 安全处理请求结果
|
|
28
38
|
* const [error, data] = await to(api.get<Blog>("/blogs/hello-world"));
|
|
29
39
|
* if (error) {
|
|
@@ -55,3 +65,4 @@ export declare const fetcher: (baseURL?: string, baseOptions?: RequestInit) => {
|
|
|
55
65
|
export declare const to: <T, E = Error>(promise: Promise<T>) => Promise<[null, T] | [E, undefined]>;
|
|
56
66
|
/** 从 url 响应头获取真实链接 */
|
|
57
67
|
export declare const getRealURL: (originURL: string) => Promise<string>;
|
|
68
|
+
export {};
|
package/dist/string.d.ts
CHANGED
|
@@ -30,22 +30,49 @@ export type Decapitalize<S extends string> = S extends `${infer P1}${infer Rest}
|
|
|
30
30
|
* decapitalize("Hello") // "hello"
|
|
31
31
|
*/
|
|
32
32
|
export declare const decapitalize: <S extends string>(s: S) => Decapitalize<S>;
|
|
33
|
+
/**
|
|
34
|
+
* 图片压缩选项
|
|
35
|
+
*/
|
|
36
|
+
export type ImageCompressionOptions = {
|
|
37
|
+
/** 压缩比率,默认 0.92 */
|
|
38
|
+
quality?: number;
|
|
39
|
+
/**
|
|
40
|
+
* 自定义压缩函数,用于非浏览器环境(Node.js/Bun)
|
|
41
|
+
* 如果提供,将使用此函数替代默认的 canvas 压缩
|
|
42
|
+
* @param arrayBuffer 图片的 ArrayBuffer 数据
|
|
43
|
+
* @param mime 图片的 MIME 类型
|
|
44
|
+
* @param quality 压缩质量
|
|
45
|
+
* @returns 压缩后的 base64 字符串
|
|
46
|
+
*/
|
|
47
|
+
compressor?: (arrayBuffer: ArrayBuffer, mime: string, quality: number) => Promise<string> | string;
|
|
48
|
+
};
|
|
33
49
|
/**
|
|
34
50
|
* 图片地址转 base64 数据
|
|
35
51
|
*
|
|
36
52
|
* @param imageUrl 图片地址
|
|
37
53
|
* @param options 可选配置
|
|
38
|
-
* @param options.quality 压缩比率,默认 0.92
|
|
54
|
+
* @param options.quality 压缩比率,默认 0.92
|
|
55
|
+
* @param options.compressor 自定义压缩函数,用于 Node.js/Bun 环境
|
|
39
56
|
*
|
|
40
57
|
* @example
|
|
41
|
-
*
|
|
58
|
+
* // 基本用法(浏览器自动使用 Canvas 压缩)
|
|
59
|
+
* imageUrlToBase64("https://example.com/image.jpg");
|
|
42
60
|
*
|
|
43
61
|
* @example
|
|
44
|
-
*
|
|
62
|
+
* // Node.js/Bun 使用 sharp 压缩
|
|
63
|
+
* import sharp from "sharp";
|
|
64
|
+
*
|
|
65
|
+
* imageUrlToBase64("https://example.com/image.jpg", {
|
|
66
|
+
* quality: 0.8,
|
|
67
|
+
* compressor: async (buffer, mime, quality) => {
|
|
68
|
+
* const compressed = await sharp(Buffer.from(buffer))
|
|
69
|
+
* .jpeg({ quality: Math.round(quality * 100) })
|
|
70
|
+
* .toBuffer();
|
|
71
|
+
* return `data:${mime};base64,${compressed.toString("base64")}`;
|
|
72
|
+
* }
|
|
73
|
+
* });
|
|
45
74
|
*/
|
|
46
|
-
export declare const imageUrlToBase64: (imageUrl: string,
|
|
47
|
-
quality?: number;
|
|
48
|
-
}) => Promise<string>;
|
|
75
|
+
export declare const imageUrlToBase64: (imageUrl: string, options?: ImageCompressionOptions) => Promise<string>;
|
|
49
76
|
/**
|
|
50
77
|
* 将字符串压缩为单行精简格式
|
|
51
78
|
*
|
|
@@ -1,92 +1,99 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--light-hl-0: #008000;
|
|
3
|
-
--dark-hl-0: #6A9955;
|
|
4
|
-
--light-hl-1: #795E26;
|
|
5
|
-
--dark-hl-1: #DCDCAA;
|
|
6
|
-
--light-hl-2: #000000;
|
|
7
|
-
--dark-hl-2: #D4D4D4;
|
|
8
|
-
--light-hl-3: #A31515;
|
|
9
|
-
--dark-hl-3: #CE9178;
|
|
10
|
-
--light-hl-4: #AF00DB;
|
|
11
|
-
--dark-hl-4: #C586C0;
|
|
12
|
-
--light-hl-5: #001080;
|
|
13
|
-
--dark-hl-5: #9CDCFE;
|
|
14
|
-
--light-hl-6: #0000FF;
|
|
15
|
-
--dark-hl-6: #569CD6;
|
|
16
|
-
--light-hl-7: #0070C1;
|
|
17
|
-
--dark-hl-7: #4FC1FF;
|
|
18
|
-
--light-hl-8: #267F99;
|
|
19
|
-
--dark-hl-8: #4EC9B0;
|
|
20
|
-
--light-hl-9: #098658;
|
|
21
|
-
--dark-hl-9: #B5CEA8;
|
|
22
|
-
--light-
|
|
23
|
-
--dark-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
--hl-
|
|
30
|
-
--hl-
|
|
31
|
-
--hl-
|
|
32
|
-
--hl-
|
|
33
|
-
--hl-
|
|
34
|
-
--hl-
|
|
35
|
-
--hl-
|
|
36
|
-
--hl-
|
|
37
|
-
--
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
--hl-
|
|
45
|
-
--hl-
|
|
46
|
-
--hl-
|
|
47
|
-
--hl-
|
|
48
|
-
--hl-
|
|
49
|
-
--hl-
|
|
50
|
-
--hl-
|
|
51
|
-
--
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
:
|
|
55
|
-
--
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
--hl-
|
|
60
|
-
--hl-
|
|
61
|
-
--hl-
|
|
62
|
-
--hl-
|
|
63
|
-
--hl-
|
|
64
|
-
--hl-
|
|
65
|
-
--
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
:
|
|
69
|
-
--hl-
|
|
70
|
-
--
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
--hl-
|
|
75
|
-
--hl-
|
|
76
|
-
--hl-
|
|
77
|
-
--hl-
|
|
78
|
-
--hl-
|
|
79
|
-
--
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
.hl-
|
|
89
|
-
.hl-
|
|
90
|
-
.hl-
|
|
91
|
-
.hl-
|
|
92
|
-
|
|
1
|
+
:root {
|
|
2
|
+
--light-hl-0: #008000;
|
|
3
|
+
--dark-hl-0: #6A9955;
|
|
4
|
+
--light-hl-1: #795E26;
|
|
5
|
+
--dark-hl-1: #DCDCAA;
|
|
6
|
+
--light-hl-2: #000000;
|
|
7
|
+
--dark-hl-2: #D4D4D4;
|
|
8
|
+
--light-hl-3: #A31515;
|
|
9
|
+
--dark-hl-3: #CE9178;
|
|
10
|
+
--light-hl-4: #AF00DB;
|
|
11
|
+
--dark-hl-4: #C586C0;
|
|
12
|
+
--light-hl-5: #001080;
|
|
13
|
+
--dark-hl-5: #9CDCFE;
|
|
14
|
+
--light-hl-6: #0000FF;
|
|
15
|
+
--dark-hl-6: #569CD6;
|
|
16
|
+
--light-hl-7: #0070C1;
|
|
17
|
+
--dark-hl-7: #4FC1FF;
|
|
18
|
+
--light-hl-8: #267F99;
|
|
19
|
+
--dark-hl-8: #4EC9B0;
|
|
20
|
+
--light-hl-9: #098658;
|
|
21
|
+
--dark-hl-9: #B5CEA8;
|
|
22
|
+
--light-hl-10: #000000FF;
|
|
23
|
+
--dark-hl-10: #D4D4D4;
|
|
24
|
+
--light-code-background: #FFFFFF;
|
|
25
|
+
--dark-code-background: #1E1E1E;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@media (prefers-color-scheme: light) { :root {
|
|
29
|
+
--hl-0: var(--light-hl-0);
|
|
30
|
+
--hl-1: var(--light-hl-1);
|
|
31
|
+
--hl-2: var(--light-hl-2);
|
|
32
|
+
--hl-3: var(--light-hl-3);
|
|
33
|
+
--hl-4: var(--light-hl-4);
|
|
34
|
+
--hl-5: var(--light-hl-5);
|
|
35
|
+
--hl-6: var(--light-hl-6);
|
|
36
|
+
--hl-7: var(--light-hl-7);
|
|
37
|
+
--hl-8: var(--light-hl-8);
|
|
38
|
+
--hl-9: var(--light-hl-9);
|
|
39
|
+
--hl-10: var(--light-hl-10);
|
|
40
|
+
--code-background: var(--light-code-background);
|
|
41
|
+
} }
|
|
42
|
+
|
|
43
|
+
@media (prefers-color-scheme: dark) { :root {
|
|
44
|
+
--hl-0: var(--dark-hl-0);
|
|
45
|
+
--hl-1: var(--dark-hl-1);
|
|
46
|
+
--hl-2: var(--dark-hl-2);
|
|
47
|
+
--hl-3: var(--dark-hl-3);
|
|
48
|
+
--hl-4: var(--dark-hl-4);
|
|
49
|
+
--hl-5: var(--dark-hl-5);
|
|
50
|
+
--hl-6: var(--dark-hl-6);
|
|
51
|
+
--hl-7: var(--dark-hl-7);
|
|
52
|
+
--hl-8: var(--dark-hl-8);
|
|
53
|
+
--hl-9: var(--dark-hl-9);
|
|
54
|
+
--hl-10: var(--dark-hl-10);
|
|
55
|
+
--code-background: var(--dark-code-background);
|
|
56
|
+
} }
|
|
57
|
+
|
|
58
|
+
:root[data-theme='light'] {
|
|
59
|
+
--hl-0: var(--light-hl-0);
|
|
60
|
+
--hl-1: var(--light-hl-1);
|
|
61
|
+
--hl-2: var(--light-hl-2);
|
|
62
|
+
--hl-3: var(--light-hl-3);
|
|
63
|
+
--hl-4: var(--light-hl-4);
|
|
64
|
+
--hl-5: var(--light-hl-5);
|
|
65
|
+
--hl-6: var(--light-hl-6);
|
|
66
|
+
--hl-7: var(--light-hl-7);
|
|
67
|
+
--hl-8: var(--light-hl-8);
|
|
68
|
+
--hl-9: var(--light-hl-9);
|
|
69
|
+
--hl-10: var(--light-hl-10);
|
|
70
|
+
--code-background: var(--light-code-background);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
:root[data-theme='dark'] {
|
|
74
|
+
--hl-0: var(--dark-hl-0);
|
|
75
|
+
--hl-1: var(--dark-hl-1);
|
|
76
|
+
--hl-2: var(--dark-hl-2);
|
|
77
|
+
--hl-3: var(--dark-hl-3);
|
|
78
|
+
--hl-4: var(--dark-hl-4);
|
|
79
|
+
--hl-5: var(--dark-hl-5);
|
|
80
|
+
--hl-6: var(--dark-hl-6);
|
|
81
|
+
--hl-7: var(--dark-hl-7);
|
|
82
|
+
--hl-8: var(--dark-hl-8);
|
|
83
|
+
--hl-9: var(--dark-hl-9);
|
|
84
|
+
--hl-10: var(--dark-hl-10);
|
|
85
|
+
--code-background: var(--dark-code-background);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.hl-0 { color: var(--hl-0); }
|
|
89
|
+
.hl-1 { color: var(--hl-1); }
|
|
90
|
+
.hl-2 { color: var(--hl-2); }
|
|
91
|
+
.hl-3 { color: var(--hl-3); }
|
|
92
|
+
.hl-4 { color: var(--hl-4); }
|
|
93
|
+
.hl-5 { color: var(--hl-5); }
|
|
94
|
+
.hl-6 { color: var(--hl-6); }
|
|
95
|
+
.hl-7 { color: var(--hl-7); }
|
|
96
|
+
.hl-8 { color: var(--hl-8); }
|
|
97
|
+
.hl-9 { color: var(--hl-9); }
|
|
98
|
+
.hl-10 { color: var(--hl-10); }
|
|
99
|
+
pre, code { background: var(--code-background); }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "eJyNlF1v2jAUQP+Ln9HaoX5oPJZqEiqDCkJfpj245pZ49Vfjm21s2n+fICU4zo2915yco9jx9dc/DOEXsgmbcg2qsGvDX4GNmONYsgnDvQN/EbIPJWrFRuxVmi2bjC8/3X68Hv8dBR0nkSv5m6icSK5xD2KwErJ8B9wX7h5g7/uZFv1n5YmrGoY6DcyVPnPl93Hh+DBnzjTfwdRqV4H30pqlQ2lN72sGXsvVHyupJcofvc1uQa6wgrcaPM6MxLgRoFxlDVigigPN06x7OJyFPR7VXiFguY4g5+ClNuK4lRdicBZurjqZ/gEOI/QR7iasdlzgGisy0dJEYgvPtjaC/IYTS+rpZWwHZ7GTeQEUJZCreEcJeQe4Aq42qznln2kiIQ9TsalUYe+4h5srKhS/k8r5aI6DiiemOZIXUtHqQqqkuHz+DgJpt2FJnRjysDAw6lGkqGosB5besISurHUbg/T6W5gI6PguP+uaustjOb7COzp1hXcDUO2g2Wi6EfBEpuJma/XMkH+yhYmAVwCOko8gJZJXZOAPXpOdDJaVRVTkOTqxlC41zO2OtBuUki3p2YTyU2I55aIkv7eFvcC3f/16Em8="
|
package/docs/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "
|
|
1
|
+
window.searchData = "eJydmdtu4zYQQP+FfRUSc+j7Y1MUCLrdLZLsvghGochMzEa3lehs0yD/vqAkW0NxnI7zlECjOaKoM6Q0fhV1+aMR6/hVPJliK9YwWS3kDCJRJLkWa3GV5Dq7K2+L5EmLSOzrTKyFfal0c4lDFzubZyISaZY0jW7EWoi36DSzMjbJzH8h8RA4i/ebTk8RcehMpq7+TKo/9EsTII+RjxC/Jdlen2B2sbOovydZ8zKitcfOolznyaO+KvOq1k1jyuJLZU1ZjEd54qx3ryQnMD1eJu1zy/oM8i9eFrpIJKqk1oV9Z/wnxvF9n2TGjqft3UEMKR8dwXjO/6pNbqx5Hit7PH7WE7zR3/e6sdeFsSMeipxFvNX2zmYjWHfwPI5bH+7KdrUY01DoXeYcOUQtSA/7Im3n+zLlLkoeMlg9MJC1fsx9y5PU3tqawh2DXNxW35f7IqXGdgjxUe/e6pa7WCLkg7bpTlN32ke4oEdtb3SSfb35RLCGIBdnXD1+rbO78tek0fMpAR2fwkY3/qKLiM3/L70e6LPJSMxnw64H03y5/0enluR0IT4qXJMwjbcyecC7em939FR1IS4qK8vqa2HJ+TrGuLB8tLEPqJyxsfug0X7uoRj7OYbp+lF3T4zkoTAXWSfFtsyvC8qOY4wLazKtKwLUHmdDqN0AsT6wI9hdXVqbUc4eQmyUyfWn8pEidRE2qKQYJTf9h7G7qyTdUfd0jFGwTSRMsdX/ivWreNa1exMRawEX6mIlIvFgdLZ1b/vddSK3VeW6tWNbpvv2301/2jed2rJ2J3dnX05EFE8iWFyAVJtNFB+S20B74MAYjrSJUkSxpBJlkCi9RBBRDFQiBIngJSoRxSpScKFAeokqSFRe4lRE8ZRKnAaJUy9xJqJ4RiXOgsSZlzgXUTynEudB4txLXIgoXlCJiyBx4SUuRRQvqcRlkLj0ElciildU4ipIXPkCOB/khEqVoTxyZE+rjySTCYF8g6TzQpIOyVAi6Vsk1SnjZeiR9EWS05PShypJ3yXpDJGkvzLUSfo+SWeJJB2WoVLSd0ouTlWcDK2SvlbSySLJGpChWdJXSzphJFkHMrRL+npBqxdZCxDqBb5e0OpF1gOEesFogWr1ImsCiDXK1wucMUBWBYR+ge8XOGWArAoIBQNfMHDKAJDJoWDgCwZOGSDthFAw8AWDVjDSTggNA98wcM4AaRiEhoFvGDhngDQMQsPAN0w5Z4A0TIWGKd8w5ZwB0jAVGqZ8w9TpBUyFhqnRNtgaRuqpiJ3QN0w5ZxSppwoNU75hyjmjSD1VaJjyDVPOGUXqqULD+kPti8+zrq3eXncvQHHc9Qps2XS9glfxd/9uNDm8aL2KiVi/vkVCKvf3bXgjao8eX4pcrB0H+nwecHLAyR435eG6ZkDjOgUIpxBvxgYdWmQDaDFwFizM0GpAo5mi0cyZGHqeYCBBP0/ccekqT6qn9ptt4KF54j2+nvPcf7INJHSPvCf30HUABsJsIPAe2bFxgqYaQeSSRXnUttZJ5r4RMGiOQCsWqG2GpEP/sjx0gAcqgvI8aJn7OrPlfd+DQUNEcsKEh2uCWZdLRJFMSmH8yVohBjAZZd9zQXKjRQV4OpqmGvotiITWE+DpaBrbN1oQBpcbz0nXSNl3TRbEQWUGvAdP1CqgEgNe1ZOVCqhGgFcjbeOkPPRVEAoJDbwqIZ8X8odHOf6WMDCQx7yb6ro3pvAdREWleEVVd78OmPZ3A1QUyGbJIzXaWutXFt4YedXZ95jQLaGZUUyG2+5tmXYtJjQcVBCy34AUr+CHFhMaGXruilfwromUufYS2sPQRCtesbveEgKgSVa8MncdpLTrLiEOmh3FKPNNJCpT6cwUWqzjzdvbT3XIt20=";
|