@nickyzj2023/utils 1.0.42 → 1.0.44
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/AGENTS.md +131 -0
- package/biome.json +35 -34
- package/dist/index.js +1 -1
- package/dist/network.d.ts +2 -0
- package/dist/string.d.ts +11 -2
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/functions/camelToSnake.html +1 -1
- package/docs/functions/capitalize.html +1 -1
- package/docs/functions/compactStr.html +1 -1
- package/docs/functions/debounce.html +1 -1
- package/docs/functions/decapitalize.html +1 -1
- package/docs/functions/fetcher.html +1 -1
- package/docs/functions/getRealURL.html +175 -0
- package/docs/functions/imageUrlToBase64.html +9 -3
- package/docs/functions/isFalsy.html +1 -1
- package/docs/functions/isNil.html +1 -1
- package/docs/functions/isObject.html +1 -1
- package/docs/functions/isPrimitive.html +1 -1
- package/docs/functions/isTruthy.html +1 -1
- package/docs/functions/loopUntil.html +1 -1
- package/docs/functions/mapKeys.html +1 -1
- package/docs/functions/mapValues.html +1 -1
- package/docs/functions/mergeObjects.html +1 -1
- package/docs/functions/randomInt.html +1 -1
- package/docs/functions/sleep.html +1 -1
- package/docs/functions/snakeToCamel.html +1 -1
- package/docs/functions/throttle.html +1 -1
- package/docs/functions/timeLog.html +1 -1
- package/docs/functions/to.html +1 -1
- package/docs/functions/withCache.html +3 -3
- package/docs/modules.html +1 -1
- package/docs/types/CamelToSnake.html +1 -1
- package/docs/types/Capitalize.html +1 -1
- package/docs/types/Decapitalize.html +1 -1
- package/docs/types/DeepMapKeys.html +1 -1
- package/docs/types/DeepMapValues.html +1 -1
- package/docs/types/Falsy.html +1 -1
- package/docs/types/Primitive.html +1 -1
- package/docs/types/RequestInit.html +1 -1
- package/docs/types/SetTtl.html +1 -1
- package/docs/types/SnakeToCamel.html +1 -1
- package/package.json +25 -24
- package/src/network.ts +17 -0
- package/src/string.ts +27 -5
package/AGENTS.md
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
This file contains essential information for AI coding agents working on this project.
|
|
4
|
+
|
|
5
|
+
## Project Overview
|
|
6
|
+
|
|
7
|
+
这是一个前端工具库(Frontend Utility Library),提供常用的 TypeScript/JavaScript 工具函数,帮助开发者简化日常开发任务。项目使用 Bun 作为运行时和构建工具,发布到 npm 仓库 `@nickyzj2023/utils`。
|
|
8
|
+
|
|
9
|
+
## Technology Stack
|
|
10
|
+
|
|
11
|
+
- **Runtime**: [Bun](https://bun.com) v1.3.2+ - 快速的 JavaScript 运行时和包管理器
|
|
12
|
+
- **Language**: TypeScript 5.9.3+
|
|
13
|
+
- **Build Tool**: Bun 内置打包器
|
|
14
|
+
- **Linting/Formatting**: Biome 2.3.14
|
|
15
|
+
- **Documentation**: TypeDoc 0.28.16 + Material Theme
|
|
16
|
+
- **Dependencies**:
|
|
17
|
+
- `sharp` (^0.34.5) - 图片处理库,用于 `imageUrlToBase64` 功能
|
|
18
|
+
|
|
19
|
+
## Project Structure
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
.
|
|
23
|
+
├── src/ # 源代码目录
|
|
24
|
+
│ ├── index.ts # 入口文件,导出所有模块
|
|
25
|
+
│ ├── dom.ts # DOM 相关工具(timeLog)
|
|
26
|
+
│ ├── function.ts # 函数控制工具(loopUntil)
|
|
27
|
+
│ ├── hoc.ts # 高阶函数(withCache)
|
|
28
|
+
│ ├── is.ts # 类型判断工具(isObject, isPrimitive, isFalsy, isTruthy, isNil)
|
|
29
|
+
│ ├── lru-cache.ts # LRU 缓存实现
|
|
30
|
+
│ ├── network.ts # 网络请求工具(fetcher, to, getRealURL)
|
|
31
|
+
│ ├── number.ts # 数字工具(randomInt)
|
|
32
|
+
│ ├── object.ts # 对象操作工具(mergeObjects, mapKeys, mapValues)
|
|
33
|
+
│ ├── string.ts # 字符串工具(snakeToCamel, camelToSnake, capitalize, decapitalize, imageUrlToBase64, compactStr)
|
|
34
|
+
│ └── time.ts # 时间控制工具(sleep, debounce, throttle)
|
|
35
|
+
├── dist/ # 构建输出目录(包含 .js 和 .d.ts 文件)
|
|
36
|
+
├── docs/ # TypeDoc 生成的文档网站
|
|
37
|
+
├── package.json # 包配置
|
|
38
|
+
├── tsconfig.json # TypeScript 配置
|
|
39
|
+
├── biome.json # Biome 代码规范配置
|
|
40
|
+
└── .gitignore # Git 忽略规则
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Build Commands
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# 完整构建(打包 + 类型声明 + 文档)
|
|
47
|
+
bun run build
|
|
48
|
+
|
|
49
|
+
# 仅生成文档
|
|
50
|
+
bun run docs
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
构建流程:
|
|
54
|
+
1. `bun build --target=bun --outdir ./dist --minify ./src/index.ts` - 使用 Bun 打包并压缩
|
|
55
|
+
2. `tsc` - 生成 TypeScript 类型声明文件(.d.ts)
|
|
56
|
+
3. `typedoc src/index.ts --plugin typedoc-material-theme` - 生成 API 文档
|
|
57
|
+
|
|
58
|
+
## Code Style Guidelines
|
|
59
|
+
|
|
60
|
+
项目使用 **Biome** 进行代码格式化和静态检查,配置见 `biome.json`:
|
|
61
|
+
|
|
62
|
+
- **缩进**: Tab(非空格)
|
|
63
|
+
- **引号**: 双引号(double)
|
|
64
|
+
- **规则**:
|
|
65
|
+
- 启用推荐规则
|
|
66
|
+
- 允许未使用的变量和函数参数(`noUnusedVariables: off`, `noUnusedFunctionParameters: off`)
|
|
67
|
+
- 允许显式使用 `any` 类型(`noExplicitAny: off`)
|
|
68
|
+
- 允许非空断言(`noNonNullAssertion: off`)
|
|
69
|
+
- 不强制使用模板字符串(`useTemplate: off`)
|
|
70
|
+
|
|
71
|
+
### 代码规范
|
|
72
|
+
|
|
73
|
+
1. **注释语言**: 使用中文编写 JSDoc 注释
|
|
74
|
+
2. **导出方式**: 所有工具函数使用命名导出(named exports)
|
|
75
|
+
3. **类型定义**:
|
|
76
|
+
- 工具类型(如 `Primitive`, `Falsy`, `SnakeToCamel`)与实现放在同一文件
|
|
77
|
+
- 复杂类型使用 TypeScript 模板字面量类型进行转换
|
|
78
|
+
4. **函数风格**:
|
|
79
|
+
- 优先使用箭头函数
|
|
80
|
+
- 泛型函数使用 `<T>` 语法
|
|
81
|
+
- 类型守卫函数返回 `value is Type`
|
|
82
|
+
|
|
83
|
+
## Module Organization
|
|
84
|
+
|
|
85
|
+
项目按功能领域划分模块:
|
|
86
|
+
|
|
87
|
+
| 模块 | 功能描述 | 主要导出 |
|
|
88
|
+
|------|---------|---------|
|
|
89
|
+
| `is` | 类型判断 | `isObject`, `isPrimitive`, `isFalsy`, `isTruthy`, `isNil`, `Primitive`, `Falsy` |
|
|
90
|
+
| `network` | 网络请求 | `fetcher`, `to`, `getRealURL`, `RequestInit` |
|
|
91
|
+
| `object` | 对象操作 | `mergeObjects`, `mapKeys`, `mapValues`, `DeepMapKeys`, `DeepMapValues` |
|
|
92
|
+
| `string` | 字符串处理 | `snakeToCamel`, `camelToSnake`, `capitalize`, `decapitalize`, `imageUrlToBase64`, `compactStr` |
|
|
93
|
+
| `time` | 时间控制 | `sleep`, `debounce`, `throttle` |
|
|
94
|
+
| `function` | 函数控制 | `loopUntil` |
|
|
95
|
+
| `hoc` | 高阶函数 | `withCache`, `SetTtl` |
|
|
96
|
+
| `lru-cache` | 缓存实现 | `LRUCache`(默认导出) |
|
|
97
|
+
| `dom` | DOM 工具 | `timeLog` |
|
|
98
|
+
|
|
99
|
+
## Testing
|
|
100
|
+
|
|
101
|
+
**当前项目没有测试框架配置**。如需添加测试,建议使用:
|
|
102
|
+
- Bun 内置测试运行器(`bun:test`)
|
|
103
|
+
|
|
104
|
+
## Publishing
|
|
105
|
+
|
|
106
|
+
项目发布到 npm 仓库:
|
|
107
|
+
- 包名: `@nickyzj2023/utils`
|
|
108
|
+
- 版本: 见 `package.json` 中的 `version` 字段
|
|
109
|
+
- 入口: `dist/index.js`(ES Module)
|
|
110
|
+
- 类型: `dist/index.d.ts`
|
|
111
|
+
|
|
112
|
+
## Security Considerations
|
|
113
|
+
|
|
114
|
+
1. **敏感信息**: `.npmrc` 文件包含 npm 认证令牌,已在 `.gitignore` 中配置忽略
|
|
115
|
+
2. **依赖安全**: `sharp` 是原生依赖,需要确保其安全性
|
|
116
|
+
3. **网络请求**: `fetcher` 函数会解析 JSON 错误响应,注意潜在的安全风险
|
|
117
|
+
|
|
118
|
+
## Development Workflow
|
|
119
|
+
|
|
120
|
+
1. 修改源代码(`src/` 目录)
|
|
121
|
+
2. 运行 `bun run build` 构建项目
|
|
122
|
+
3. 检查生成的类型声明文件(`dist/*.d.ts`)
|
|
123
|
+
4. 查看文档(`docs/` 目录或启动本地服务器查看)
|
|
124
|
+
5. 提交更改
|
|
125
|
+
|
|
126
|
+
## Important Notes
|
|
127
|
+
|
|
128
|
+
- 项目使用 ES Module(`"type": "module"`),不支持 CommonJS
|
|
129
|
+
- 构建目标为 Bun 运行时(`--target=bun`)
|
|
130
|
+
- `imageUrlToBase64` 功能依赖 `sharp` 库,需要 Node.js/Bun 原生环境支持
|
|
131
|
+
- `fetcher` 函数基于 Fetch API,在 Bun 环境下使用 `BunFetchRequestInit` 类型
|
package/biome.json
CHANGED
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
2
|
+
"$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
|
|
3
|
+
"vcs": {
|
|
4
|
+
"enabled": true,
|
|
5
|
+
"clientKind": "git",
|
|
6
|
+
"useIgnoreFile": true
|
|
7
|
+
},
|
|
8
|
+
"files": {
|
|
9
|
+
"ignoreUnknown": false
|
|
10
|
+
},
|
|
11
|
+
"formatter": {
|
|
12
|
+
"enabled": true,
|
|
13
|
+
"indentStyle": "tab"
|
|
14
|
+
},
|
|
15
|
+
"linter": {
|
|
16
|
+
"enabled": true,
|
|
17
|
+
"rules": {
|
|
18
|
+
"recommended": true,
|
|
19
|
+
"correctness": {
|
|
20
|
+
"noUnusedVariables": "off",
|
|
21
|
+
"noUnusedFunctionParameters": "off"
|
|
22
|
+
},
|
|
23
|
+
"suspicious": {
|
|
24
|
+
"noExplicitAny": "off"
|
|
25
|
+
},
|
|
26
|
+
"style": {
|
|
27
|
+
"noNonNullAssertion": "off",
|
|
28
|
+
"useTemplate": "off"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"javascript": {
|
|
33
|
+
"formatter": {
|
|
34
|
+
"quoteStyle": "double"
|
|
35
|
+
}
|
|
36
|
+
}
|
|
36
37
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var
|
|
2
|
+
var S=(...I)=>{console.log(`${new Date().toLocaleTimeString()}`,...I)};var K=async(I,$)=>{let{maxRetries:M=5,shouldStop:W=()=>!0}=$??{};for(let z=0;z<M;z++){let H=await I(z);if(W(H))return H}throw Error(`\u8D85\u8FC7\u4E86\u6700\u5927\u5FAA\u73AF\u6B21\u6570\uFF08${M}\uFF09\u4E14\u672A\u6EE1\u8DB3\u505C\u6B62\u6267\u884C\u6761\u4EF6`)};var L=(I,$=-1)=>{let M=new Map,W=(...z)=>{let H=JSON.stringify(z),D=Date.now(),J=M.get(H);if(J&&D<J.expiresAt)return J.value;let G=$===-1?1/0:D+$*1000,X={setTtl:(Z)=>{G=D+Z*1000}},_=I.apply(X,z);if(_ instanceof Promise){let Z=_.then((C)=>{return M.set(H,{value:C,expiresAt:G}),C});return M.set(H,{value:Z,expiresAt:G}),Z}return M.set(H,{value:_,expiresAt:G}),_};return W.clear=()=>M.clear(),W.updateTtl=(z)=>{$=z;let H=Date.now(),D=H+z*1000;for(let[J,G]of M.entries())if(G.expiresAt>H)G.expiresAt=D,M.set(J,G)},W};var Q=(I)=>{return I?.constructor===Object},Y=(I)=>{return I===null||I===void 0||typeof I!=="object"&&typeof I!=="function"},U=(I)=>{return!I},V=(I)=>{return!!I},T=(I)=>{return I===null||I===void 0};var P=(I,$)=>{let M={...I};for(let W of Object.keys($)){let z=M[W],H=$[W];if(Y(z)&&Y(H)){M[W]=H;continue}if(Array.isArray(z)&&Array.isArray(H)){M[W]=z.concat(H);continue}if(Q(z)&&Q(H)){M[W]=P(z,H);continue}M[W]=H}return M},B=(I,$)=>{if(Array.isArray(I))return I.map((M)=>B(M,$));if(Q(I))return Object.keys(I).reduce((W,z)=>{let H=$(z),D=I[z];return W[H]=B(D,$),W},{});return I},F=(I,$,M)=>{let{filter:W}=M??{};if(Array.isArray(I)){let z=I.map((H,D)=>{if(Q(H))return F(H,$,M);return $(H,D)});if(W)return z.filter((H,D)=>W(H,D));return z}if(Q(I))return Object.keys(I).reduce((H,D)=>{let J=I[D],G;if(Q(J)||Array.isArray(J))G=F(J,$,M);else G=$(J,D);if(!W||W(G,D))H[D]=G;return H},{});return I};var q=(I="",$={})=>{let M=async(W,z={})=>{let H=new URL(I?`${I}${W}`:W),{params:D,parser:J,...G}=P($,z);if(Q(D))Object.entries(D).forEach(([Z,C])=>{if(T(C))return;H.searchParams.append(Z,C.toString())});if(Q(G.body))G.body=JSON.stringify(G.body),G.headers={...G.headers,"Content-Type":"application/json"};let X=await fetch(H,G);if(!X.ok){if(X.headers.get("Content-Type")?.startsWith("application/json"))throw await X.json();throw Error(X.statusText)}return await(J?.(X)??X.json())};return{get:(W,z)=>M(W,{...z,method:"GET"}),post:(W,z,H)=>M(W,{...H,method:"POST",body:z}),put:(W,z,H)=>M(W,{...H,method:"PUT",body:z}),delete:(W,z)=>M(W,{...z,method:"DELETE"})}},x=async(I)=>{try{return[null,await I]}catch($){return[$,void 0]}},w=async(I)=>{let[$,M]=await x(fetch(I,{method:"HEAD",redirect:"manual"}));if($)return I;return M.headers.get("location")||I};var d=(I,$)=>{return Math.floor(Math.random()*($-I+1))+I};import E from"sharp";var b=(I)=>{return I.replace(/_([a-zA-Z])/g,($,M)=>M.toUpperCase())},y=(I)=>{return I.replace(/([A-Z])/g,($,M)=>`_${M.toLowerCase()}`)},p=(I)=>{return I.charAt(0).toUpperCase()+I.slice(1)},n=(I)=>{return I.charAt(0).toLowerCase()+I.slice(1)},u=async(I,{quality:$=0.92}={})=>{if(!I.startsWith("http"))throw Error("\u56FE\u7247\u5730\u5740\u5FC5\u987B\u4EE5http\u6216https\u5F00\u5934");let M="",W=await q().get(I,{parser:async(D)=>{return M=D.headers.get("Content-Type")||"image/jpeg",D.arrayBuffer()}}),z=Buffer.from(W),H;if(M==="image/png")H=await E(z).png({compressionLevel:Math.round($*9)}).toBuffer();else if(M==="image/gif")H=await E(z).gif().toBuffer();else H=await E(z).jpeg({quality:$}).toBuffer();return`data:${M};base64,${H.toString("base64")}`},o=(I="",$)=>{if(!I)return"";let{maxLength:M=1/0,disableNewLineReplace:W=!1,disableWhitespaceCollapse:z=!1,omission:H="..."}=$??{},D=I;if(!W)D=D.replace(/\r?\n/g,"\\n");else D=D.replace(/\r?\n/g," ");if(!z)D=D.replace(/\s+/g," ");if(D=D.trim(),M>0&&D.length>M)return D.slice(0,M)+H;return D};var i=async(I=150)=>{return new Promise(($)=>{setTimeout($,I)})},r=(I,$=300)=>{let M=null;return(...W)=>{if(M)clearTimeout(M);M=setTimeout(()=>{I(...W)},$)}},l=(I,$=300)=>{let M=null;return function(...W){if(!M)M=setTimeout(()=>{M=null,I.apply(this,W)},$)}};export{L as withCache,x as to,S as timeLog,l as throttle,b as snakeToCamel,i as sleep,d as randomInt,P as mergeObjects,F as mapValues,B as mapKeys,K as loopUntil,V as isTruthy,Y as isPrimitive,Q as isObject,T as isNil,U as isFalsy,u as imageUrlToBase64,w as getRealURL,q as fetcher,n as decapitalize,r as debounce,o as compactStr,p as capitalize,y as camelToSnake};
|
package/dist/network.d.ts
CHANGED
|
@@ -53,3 +53,5 @@ export declare const fetcher: (baseURL?: string, baseOptions?: RequestInit) => {
|
|
|
53
53
|
* const [error, response] = await to(fetcher().get<Blog>("/blogs/hello-world"));
|
|
54
54
|
*/
|
|
55
55
|
export declare const to: <T, E = Error>(promise: Promise<T>) => Promise<[null, T] | [E, undefined]>;
|
|
56
|
+
/** 从 url 响应头获取真实链接 */
|
|
57
|
+
export declare const getRealURL: (originURL: string) => Promise<string>;
|
package/dist/string.d.ts
CHANGED
|
@@ -33,10 +33,19 @@ export declare const decapitalize: <S extends string>(s: S) => Decapitalize<S>;
|
|
|
33
33
|
/**
|
|
34
34
|
* 图片地址转 base64 数据
|
|
35
35
|
*
|
|
36
|
+
* @param imageUrl 图片地址
|
|
37
|
+
* @param options 可选配置
|
|
38
|
+
* @param options.quality 压缩比率,默认 0.92
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* imageUrlToBase64("https://example.com/image.gif"); // "data:image/gif;base64,..."
|
|
42
|
+
*
|
|
36
43
|
* @example
|
|
37
|
-
* imageUrlToBase64("https://example.com/image.jpg"); //
|
|
44
|
+
* imageUrlToBase64("https://example.com/image.jpg", { quality: 0.8 }); // 压缩至 80% 质量
|
|
38
45
|
*/
|
|
39
|
-
export declare const imageUrlToBase64: (imageUrl: string
|
|
46
|
+
export declare const imageUrlToBase64: (imageUrl: string, { quality }?: {
|
|
47
|
+
quality?: number;
|
|
48
|
+
}) => Promise<string>;
|
|
40
49
|
/**
|
|
41
50
|
* 将字符串压缩为单行精简格式
|
|
42
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "eJyNlF1P2zAUQP/Lfa4IQwU0P64ICa3A1KZ7QTwY99IY/JHFN9vKxH9HarDUWNfOXnNyjmLn2g//gPAvgYCFtGhqv3byFWEGraQGBNC+xVAds5OGrIEZvGq3BXF2+vXyy/nZ+yx2YCFbTdLot7RSRfI21YArVLlKdcymOleI7a1sv+M+pJmIcB/+s/JTmh5znQFOla6lCfu0cHg4Zf7otNWkf6fbUUUwtRewwl89BrpxmtJGRE7TVGWNVJNJA8PTKfcwPrU/DFNaOGZTHcVO6nPvFGnvQqVy0you5qNMOmLjCD9k44S3rVS0po5NRNrlEiBgi0++d4r9hsiKenkZ29xpGWeekVSD7Co+UU4GATukFUqzWS05P9LVMpcAAdrKHW46U/tvMuDFnAul75RyITlpsRKqT1SU77Th1TttiuL90wsq4t2BFfX0kCeFzFFPInXXU5NZ+sByOggw3rcbR/z6IyztgU1v26iHynK3bSqnl+xI5y7ZcQC7HQ4bzTciV1TKdNJtvb1x7J+MsPQrg0FsOfkASiJ7RUY/VCF3TY4z1HSeyLBzFFlJ1xaXfsfaAyrJnvV8TgEBfzQ1C6ka9nsjTD94/v74Abx58Vc="
|
package/docs/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "
|
|
1
|
+
window.searchData = "eJydmN1u4zYQhd9lroXYpGwn5mVTFAiaboskuzdCUCgyk7DRjyvS2WYFv3tBUQNQg3FD9yrBGZ/PEn1GFGeAvvtuQRUDvJl2B0out5diLTNoy0aDguuy0fVDd9+WbxoyOPQ1KHAfe20Xceni1TU1ZFDVpbXaggI4ZqeY1+XeuLI2PygRCz/O4/2sq1PEuHQmU+9/K/e/6g9LkVj5sP+H+K2sD/oEM9TOov5S1vaD0EbtLMofvWmMM+90+VA/b+3u9N8Hbd1NaxzhYaU17izivXYPriawIJ7H8Vl96MbkUhqWGv3fzM0KcVBxzfF8aCtnutYuqtQGmSFpkmfApCzHuK7Zl5W7dz2Hw2Kfitvpp+7QVty1YSkVteOaNsade7MKnrWrXjV3p1MlFfSi3Z0u6693t5TV2gUW725TcaYpX/TXvn7ofiqt3qwotLUL+pFUtLHzBwAS7WKqpIKM/WJqFvPFpPYDGPv701+6ciwnlFJRxtJn0pyW9mSaAR/6g3vllyqUUlF11+2/to5dL6ylrhk0ZJNBlF00n20yFET3lhnqs72FwHT/osMvxvKwXLlUJPRlu+uam5ZLB9ZS4wG21npPQa1djHoqxHK7AbLswp67I/i95LXvnKu5zGIpFeVMo2+7F44UKqkg13GMLtX+3bjX67J65e4Ja+xNPWZg2p3+B9QA77q3pmtBgbzIL7aQwbPR9c6/eYbvyfxW1egxHbuuOoz/Pk4f+6Yr1/X+w+HTiyVkxTKTm4t8Kx4fswLNY2EUkIHKZBSQFYIzCmpEZTJKyArJGSU1ojIZc8iKPMvFxWq7nRlzakRlMq4gK1accUWNqEzGNWTFmjOuqRGVybiBrNhwxg01ojIZLyErLjnjJTWiMhmvICuuOOMVNaIyGbeQFVvu59hSIyoYgFPRCRUSARKeU+kJFeKd50f4VIgld6+CRiiWgtknQwjWTGMUS8G8OhVdQZMUS8HrAyIk+8U0TbEUzD4kgs2+oImKpWD2QRFs/gVNVSwFsw+LYHtA0GTFUjD7wAi2DwRNVyyFx4RPjGB7QdJ8xVIwj/li+0HSgMVSMI8B27JmGrBYCmYfGcmmU9KAxVIwjwFj0ylpwmIpmH1mJJswSRMWS8HsMyPZhEmasFgKZp8ZySZM0oTFUjD7zEg2YZImLJaC+dTTK1SIdx6w3EdGsunMacBiKZh9ZCSbzpwGLJaCedwC2XTmNGCxFMxjwNh05jRgKD2OLxDvund6dxNeJIoinLldZ8OZe4A/p3eMJb6wDLAENRwzEOPfI75ZuKDil4y18TrwnDnDCcQNICacSMOFQ7X1J27EgRJ4eZ4nk0B4oJ5h4svKEzH8DeJQRA0gpxtcJQL1vin3b+OhBXmgcuQNkHphI+d9OrMgCRS+eqoB0q7oORyBkQBqjYQB1mkEnBwgA5TABfJLnUZ50a7XZe1fkmMQrowHbZJA4zTg0Neue5oGBogDJXB5PO4yDWfpCimBS+QpV4mU1sxvbIOMAcQ2kdFNAwLEgBKXiBlAprWssXs8/s9IV0gaQKZ1q7FumgogBpTYImYAmdar/tR/CBMB5PjhI3IGkGk9QfvKU7DlPSWtH9iuknHDp+V5POV3OARAFCiJifaotESzvxfmRw2QRgljAtPO8iOxIfzVpDVEH8bQZhxQIwkUBlENkMax2jk3+80xgWqAtK6aBhlIACWxM/3tJDL8Xui6KswxEAUKc6wG2AarTGtTHFXMrgt/Lf+AT2tTP6eo/QQDKaAkrrGnpLWoH18gAJTEFfaAtOb0Q4oqDDCQA0ri4njOZ815PPp3kb3Z69q0GlTxeDz+C1kStC8=";
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
</div><section class="tsd-panel"><h4>Type Parameters</h4><ul class="tsd-type-parameter-list"><li><span id="cameltosnakes"><span class="tsd-kind-type-parameter">S</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-type">string</span></span></li></ul></section><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">str</span>: <a class="tsd-signature-type tsd-kind-type-parameter" href="#cameltosnakes">S</a></span></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/CamelToSnake.html" class="tsd-signature-type tsd-kind-type-alias">CamelToSnake</a><span class="tsd-signature-symbol"><</span><a class="tsd-signature-type tsd-kind-type-parameter" href="#cameltosnakes">S</a><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">camelToSnake</span><span class="hl-2">(</span><span class="hl-3">"shouldComponentUpdate"</span><span class="hl-2">) </span><span class="hl-0">// "should_component_update"</span>
|
|
161
161
|
</code><button type="button">Copy</button></pre>
|
|
162
162
|
|
|
163
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
163
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/string.ts#L36">string.ts:36</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
164
164
|
try {
|
|
165
165
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
166
166
|
const link = document.createElement("a");
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
</div><section class="tsd-panel"><h4>Type Parameters</h4><ul class="tsd-type-parameter-list"><li><span id="capitalizes"><span class="tsd-kind-type-parameter">S</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-type">string</span></span></li></ul></section><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">s</span>: <a class="tsd-signature-type tsd-kind-type-parameter" href="#capitalizes">S</a></span></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/Capitalize.html" class="tsd-signature-type tsd-kind-type-alias">Capitalize</a><span class="tsd-signature-symbol"><</span><a class="tsd-signature-type tsd-kind-type-parameter" href="#capitalizes">S</a><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">capitalize</span><span class="hl-2">(</span><span class="hl-3">"hello"</span><span class="hl-2">) </span><span class="hl-0">// "Hello"</span>
|
|
161
161
|
</code><button type="button">Copy</button></pre>
|
|
162
162
|
|
|
163
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
163
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/string.ts#L55">string.ts:55</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
164
164
|
try {
|
|
165
165
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
166
166
|
const link = document.createElement("a");
|
|
@@ -164,7 +164,7 @@
|
|
|
164
164
|
</div></li></ul></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">string</span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-0">// "Hello, world."</span><br/><span class="hl-1">compactStr</span><span class="hl-2">(</span><span class="hl-3">`</span><br/><span class="hl-3"> Hello,</span><br/><span class="hl-3"> world!</span><br/><span class="hl-3">`</span><span class="hl-2">, {</span><br/><span class="hl-2"> </span><span class="hl-5">disableNewLineReplace:</span><span class="hl-2"> </span><span class="hl-6">false</span><span class="hl-2">,</span><br/><span class="hl-2">});</span>
|
|
165
165
|
</code><button type="button">Copy</button></pre>
|
|
166
166
|
|
|
167
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
167
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/string.ts#L133">string.ts:133</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
168
168
|
try {
|
|
169
169
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
170
170
|
const link = document.createElement("a");
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
</div><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-6">const</span><span class="hl-2"> </span><span class="hl-7">search</span><span class="hl-2"> = </span><span class="hl-1">debounce</span><span class="hl-2">((</span><span class="hl-5">keyword</span><span class="hl-2">: </span><span class="hl-8">string</span><span class="hl-2">) </span><span class="hl-6">=></span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-5">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'搜索:'</span><span class="hl-2">, </span><span class="hl-5">keyword</span><span class="hl-2">);</span><br/><span class="hl-2">});</span><br/><span class="hl-1">search</span><span class="hl-2">(</span><span class="hl-3">'hello'</span><span class="hl-2">); </span><span class="hl-0">// 300ms 后执行</span>
|
|
170
170
|
</code><button type="button">Copy</button></pre>
|
|
171
171
|
|
|
172
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
172
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/time.ts#L32">time.ts:32</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
173
173
|
try {
|
|
174
174
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
175
175
|
const link = document.createElement("a");
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
</div><section class="tsd-panel"><h4>Type Parameters</h4><ul class="tsd-type-parameter-list"><li><span id="decapitalizes"><span class="tsd-kind-type-parameter">S</span> <span class="tsd-signature-keyword">extends</span> <span class="tsd-signature-type">string</span></span></li></ul></section><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">s</span>: <a class="tsd-signature-type tsd-kind-type-parameter" href="#decapitalizes">S</a></span></li></ul></div><h4 class="tsd-returns-title">Returns <a href="../types/Decapitalize.html" class="tsd-signature-type tsd-kind-type-alias">Decapitalize</a><span class="tsd-signature-symbol"><</span><a class="tsd-signature-type tsd-kind-type-parameter" href="#decapitalizes">S</a><span class="tsd-signature-symbol">></span></h4><div class="tsd-comment tsd-typography"><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-1">decapitalize</span><span class="hl-2">(</span><span class="hl-3">"Hello"</span><span class="hl-2">) </span><span class="hl-0">// "hello"</span>
|
|
161
161
|
</code><button type="button">Copy</button></pre>
|
|
162
162
|
|
|
163
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
163
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/string.ts#L72">string.ts:72</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
164
164
|
try {
|
|
165
165
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
166
166
|
const link = document.createElement("a");
|
|
@@ -170,7 +170,7 @@
|
|
|
170
170
|
</div><div class="tsd-tag-example"><h4 class="tsd-anchor-link" id="example">Example<a href="#example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h4><pre><code class="ts"><span class="hl-0">// 用法1:直接发送请求</span><br/><span class="hl-6">const</span><span class="hl-2"> </span><span class="hl-7">res</span><span class="hl-2"> = </span><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-1">fetcher</span><span class="hl-2">().</span><span class="hl-1">get</span><span class="hl-2"><</span><span class="hl-8">Blog</span><span class="hl-2">>(</span><span class="hl-3">"https://nickyzj.run:3030/blogs/hello-world"</span><span class="hl-2">);</span><br/><br/><span class="hl-0">// 用法2:创建实例</span><br/><span class="hl-6">const</span><span class="hl-2"> </span><span class="hl-7">api</span><span class="hl-2"> = </span><span class="hl-1">fetcher</span><span class="hl-2">(</span><span class="hl-3">"https://nickyzj.run:3030"</span><span class="hl-2">, { </span><span class="hl-5">headers:</span><span class="hl-2"> { </span><span class="hl-5">Authorization:</span><span class="hl-2"> </span><span class="hl-3">"Bearer token"</span><span class="hl-2"> } });</span><br/><span class="hl-6">const</span><span class="hl-2"> </span><span class="hl-7">res</span><span class="hl-2"> = </span><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-5">api</span><span class="hl-2">.</span><span class="hl-1">get</span><span class="hl-2"><</span><span class="hl-8">Blog</span><span class="hl-2">>(</span><span class="hl-3">"/blogs/hello-world"</span><span class="hl-2">, { </span><span class="hl-5">headers:</span><span class="hl-2"> {...}, </span><span class="hl-5">params:</span><span class="hl-2"> { </span><span class="hl-5">page:</span><span class="hl-2"> </span><span class="hl-9">1</span><span class="hl-2"> } }); </span><span class="hl-0">// 与实例相同的 headers 会覆盖上去,params 会转成 ?page=1 跟到 url 后面</span><br/><br/><span class="hl-0">// 安全处理请求结果</span><br/><span class="hl-6">const</span><span class="hl-2"> [</span><span class="hl-7">error</span><span class="hl-2">, </span><span class="hl-7">data</span><span class="hl-2">] = </span><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-1">to</span><span class="hl-2">(</span><span class="hl-5">api</span><span class="hl-2">.</span><span class="hl-1">get</span><span class="hl-2"><</span><span class="hl-8">Blog</span><span class="hl-2">>(</span><span class="hl-3">"/blogs/hello-world"</span><span class="hl-2">));</span><br/><span class="hl-4">if</span><span class="hl-2"> (</span><span class="hl-5">error</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-5">console</span><span class="hl-2">.</span><span class="hl-1">error</span><span class="hl-2">(</span><span class="hl-5">error</span><span class="hl-2">);</span><br/><span class="hl-2"> </span><span class="hl-4">return</span><span class="hl-2">;</span><br/><span class="hl-2">}</span><br/><span class="hl-5">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-5">data</span><span class="hl-2">);</span><br/><br/><span class="hl-0">// 缓存请求结果</span><br/><span class="hl-6">const</span><span class="hl-2"> </span><span class="hl-7">getBlogs</span><span class="hl-2"> = </span><span class="hl-1">withCache</span><span class="hl-2">(</span><span class="hl-5">api</span><span class="hl-2">.</span><span class="hl-5">get</span><span class="hl-2">);</span><br/><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-1">getBlogs</span><span class="hl-2">(</span><span class="hl-3">"/blogs"</span><span class="hl-2">);</span><br/><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-1">sleep</span><span class="hl-2">();</span><br/><span class="hl-4">await</span><span class="hl-2"> </span><span class="hl-1">getBlogs</span><span class="hl-2">(</span><span class="hl-3">"/blogs"</span><span class="hl-2">); </span><span class="hl-0">// 不发请求,使用缓存</span>
|
|
171
171
|
</code><button type="button">Copy</button></pre>
|
|
172
172
|
|
|
173
|
-
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/
|
|
173
|
+
</div></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/Nickyzj628/utils/blob/edcb18a1779e86b02ff5df1d300dcbe14cbc3a99/src/network.ts#L45">network.ts:45</a></li></ul></aside></div></li></ul></section></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@nickyzj2023/utils</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer><p class="tsd-generator">Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></footer><div class="overlay"></div><script>
|
|
174
174
|
try {
|
|
175
175
|
const generateLinkElement = document.querySelector(".tsd-generator a");
|
|
176
176
|
const link = document.createElement("a");
|