onchain-utility 0.0.14 → 0.0.15
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 +263 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,265 @@
|
|
|
1
|
-
|
|
1
|
+
## Base
|
|
2
|
+
### _isMoment
|
|
3
|
+
判断是否是Moment对象,并且不依赖moment包
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
```ts
|
|
6
|
+
_isMoment({}) // falsesd
|
|
7
|
+
_isMoment(Moment()) // truea
|
|
8
|
+
```
|
|
4
9
|
|
|
5
|
-
|
|
10
|
+
### makeDestructurable
|
|
11
|
+
优化返回值结构
|
|
12
|
+
```ts
|
|
13
|
+
const params = makeDestructurable({
|
|
14
|
+
name: 'AIC',
|
|
15
|
+
age: 16
|
|
16
|
+
}, ['AIC', 16]);
|
|
17
|
+
const { name, age } = params;
|
|
18
|
+
const [name, age] = params;
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### createEnumObject
|
|
22
|
+
创建一个对象枚举,主要用于解决真正的枚举导出类型和导出前枚举不相等的问题
|
|
23
|
+
```ts
|
|
24
|
+
createEnumObject({
|
|
25
|
+
SET: 'SET',
|
|
26
|
+
ADD: 'ADD',
|
|
27
|
+
DELETE: 'DELETE',
|
|
28
|
+
CLEAR: 'CLEAR',
|
|
29
|
+
})
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### toRawType
|
|
33
|
+
接收任意数据,生成对应类型的字符串
|
|
34
|
+
```ts
|
|
35
|
+
toRawType(() => {}) // 'Function'
|
|
36
|
+
toRawType(new Map) //'Map'
|
|
37
|
+
toRawType({}) // 'Object'
|
|
38
|
+
toRawType([]) // 'Array'
|
|
39
|
+
toRawType(0) // 'Number'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### hasOwnProperty
|
|
43
|
+
判断对象是否存在某个属性
|
|
44
|
+
```ts
|
|
45
|
+
const data = { name: 'aic' };
|
|
46
|
+
hasOwnProperty(data, 'name') // true
|
|
47
|
+
hasOwnProperty(data, 24) // false
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### isEmptyObject
|
|
51
|
+
是否是空对象
|
|
52
|
+
```ts
|
|
53
|
+
isEmptyObject({}) // true,
|
|
54
|
+
isEmptyObject({name: 'aic'}) // false
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### getHTMLTagString
|
|
58
|
+
接收一个对象
|
|
59
|
+
- `type`: `string`;标签名称,例如:`div`或`a`或`span`...,
|
|
60
|
+
- `attributes`: `Record<string, any>`;html标签属性,例如:`{style:'color:#fff;font-size:12px !important;'}`
|
|
61
|
+
- `context`: `string`;标签内容。
|
|
62
|
+
|
|
63
|
+
返回html字符串
|
|
64
|
+
```ts
|
|
65
|
+
getHTMLTagString({
|
|
66
|
+
type:"span",
|
|
67
|
+
attributes: {
|
|
68
|
+
style:'color:#fff;font-size:12px !important;'
|
|
69
|
+
},
|
|
70
|
+
context: 'text'
|
|
71
|
+
}) // <span style="color:#fff;font-size:12px !important;">text</span>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### generateSecureUUID
|
|
75
|
+
生成UUID
|
|
76
|
+
```ts
|
|
77
|
+
generateSecureUUID() // 'a6ab72c0-31ab-49bb-a591-54f776c0b2d9'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Base64
|
|
81
|
+
### getBase64Regular
|
|
82
|
+
生成base64匹配正则
|
|
83
|
+
```ts
|
|
84
|
+
const regular = getBase64Regular();
|
|
85
|
+
const png = `data:image/png;base64,iVBORwOKGgoAAA
|
|
86
|
+
ANSUhEUgAAALgA...whHJTEQgHn4pg1J8
|
|
87
|
+
1Av8HEfyAJO5uun8AAAAASUVORK5CYIl=`;
|
|
88
|
+
regular.test(png) // true
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### base64ToMimeType
|
|
92
|
+
接收base64字符串,返回
|
|
93
|
+
- `mimeType`: `string`;MIME类型;例如:"image/png"
|
|
94
|
+
- `suffix`: `string`;文件格式;例如:"png"
|
|
95
|
+
- `type`: `string`;文件类型;例如:"image"
|
|
96
|
+
```ts
|
|
97
|
+
const png = `data:image/png;base64,iVBORwOKGgoAAA
|
|
98
|
+
ANSUhEUgAAALgA...whHJTEQgHn4pg1J8
|
|
99
|
+
1Av8HEfyAJO5uun8AAAAASUVORK5CYIl=`;
|
|
100
|
+
base64ToMimeType(png); // { "mimeType":"image/png", "suffix":"png", "type":"image" }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### base64ToFile
|
|
104
|
+
接收对象
|
|
105
|
+
- `text`: `string`;base64字符串
|
|
106
|
+
- `type`: `string | undefined`;文件类型;例如:"image"
|
|
107
|
+
- `filename`: `string | undefined`;自定义文件名称
|
|
108
|
+
- `suffix`: `string | undefined`;文件格式;例如:"png"
|
|
109
|
+
|
|
110
|
+
返回`File`对象
|
|
111
|
+
```ts
|
|
112
|
+
const png = `data:image/png;base64,iVBORwOKGgoAAA
|
|
113
|
+
ANSUhEUgAAALgA...whHJTEQgHn4pg1J8
|
|
114
|
+
1Av8HEfyAJO5uun8AAAAASUVORK5CYIl=`;
|
|
115
|
+
base64ToFile({text: png}) // File {name: 'f37e4949-f912-45f8-abde-109aa8e60a28.undefined', lastModified: 1768899504506, lastModifiedDate: Tue Jan 20 2026 16:58:24 GMT+0800 (中国标准时间), webkitRelativePath: '', size: 9470, …};
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### toBase64UTF8
|
|
119
|
+
接收任意值返回base64字符串
|
|
120
|
+
```ts
|
|
121
|
+
const element = document.createElement('equation');
|
|
122
|
+
const equation = toBase64UTF8(this.__equation);
|
|
123
|
+
element.setAttribute('data-lexical-equation', equation);
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### fromBase64UTF8
|
|
127
|
+
接收base64字符串返回任意值
|
|
128
|
+
```ts
|
|
129
|
+
const element = document.createElement('equation');
|
|
130
|
+
const equation = toBase64UTF8(this.__equation);
|
|
131
|
+
element.setAttribute('data-lexical-equation', equation);
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Hooks
|
|
135
|
+
### reactive
|
|
136
|
+
react响应式数据更新
|
|
137
|
+
#### useReactive
|
|
138
|
+
无限层次响应式代理, 包含`object`,`array`,`set`,`map`,`WeakMap`,`WeakSet`
|
|
139
|
+
```tsx
|
|
140
|
+
const Dome = () => {
|
|
141
|
+
const store = useReactive({
|
|
142
|
+
name: 'aic',
|
|
143
|
+
age: 12,
|
|
144
|
+
set: new Set,
|
|
145
|
+
map: new Map,
|
|
146
|
+
list: [{hobby: 'play game'}, {hobby: ''}]
|
|
147
|
+
})
|
|
148
|
+
return <div onClick={() => {
|
|
149
|
+
store.age++ // 更新渲染
|
|
150
|
+
store.list[1].hobby = 'play basketball' // 更新渲染
|
|
151
|
+
}}>
|
|
152
|
+
<span>{store.name}</span>
|
|
153
|
+
{store.list.map(({ hobby }) => <span>{hobby}</span>)}
|
|
154
|
+
</div>
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
#### useShallowReactive
|
|
159
|
+
单层对象响应式代理
|
|
160
|
+
```tsx
|
|
161
|
+
const Dome = () => {
|
|
162
|
+
const store = useShallowReactive({
|
|
163
|
+
name: 'aic',
|
|
164
|
+
age: 12,
|
|
165
|
+
set: new Set,
|
|
166
|
+
map: new Map,
|
|
167
|
+
list: [{hobby: 'play game'}, {hobby: ''}]
|
|
168
|
+
})
|
|
169
|
+
return <div onClick={() => {
|
|
170
|
+
store.age++ // 更新渲染
|
|
171
|
+
store.list[1].hobby = 'play basketball' // 不会触发渲染
|
|
172
|
+
}}>
|
|
173
|
+
<span>{store.name}</span>
|
|
174
|
+
{store.list.map(({ hobby }) => <span>{hobby}</span>)}
|
|
175
|
+
</div>
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
#### protection
|
|
180
|
+
在代理的过程中用来保护某些属性不受响应式代理
|
|
181
|
+
```tsx
|
|
182
|
+
const Dome = () => {
|
|
183
|
+
const store = useReactive({
|
|
184
|
+
name: 'aic',
|
|
185
|
+
age: 12,
|
|
186
|
+
set: new Set,
|
|
187
|
+
map: new Map,
|
|
188
|
+
list: [protection({hobby: 'play game'}), {hobby: ''}]
|
|
189
|
+
})
|
|
190
|
+
return <div onClick={() => {
|
|
191
|
+
store.list[0].hobby = '' // 不会触发渲染
|
|
192
|
+
store.list[1].hobby = 'play basketball' // 更新渲染
|
|
193
|
+
store.set = protection(new Set); // 设置值的时候进行保护
|
|
194
|
+
store.set.add('1') // 不会触发渲染
|
|
195
|
+
}}>
|
|
196
|
+
<span>{store.name}</span>
|
|
197
|
+
{store.list.map(({ hobby }) => <span>{hobby}</span>)}
|
|
198
|
+
</div>
|
|
199
|
+
}
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
#### toRaw
|
|
203
|
+
接收一个代理对象,返回这个对象的原始对象,解决某些组件无法使用Proxy后的对象
|
|
204
|
+
```ts
|
|
205
|
+
const Table = ({list, setHobby}: {list: any[], setHobby: (params: any) => void) => {
|
|
206
|
+
return list.map((item) => <span onClick={(item) => { item.hobby = 'init' }}>{item.hobby}</span>)
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const Dome = () => {
|
|
210
|
+
const store = useReactive({
|
|
211
|
+
name: 'aic',
|
|
212
|
+
age: 12,
|
|
213
|
+
set: new Set,
|
|
214
|
+
map: new Map,
|
|
215
|
+
list: [{hobby: 'play game'}, {hobby: ''}]
|
|
216
|
+
});
|
|
217
|
+
return <Table list={toRaw(store.list)} setHobby={() => {}} />
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
#### toProxy
|
|
223
|
+
接收一个原始对象,返回这个对象的代理对象,解决转为原始对象后,修改数据无法更新渲染
|
|
224
|
+
```ts
|
|
225
|
+
const Table = ({list, setHobby}: {list: any[], setHobby: (params: any) => void) => {
|
|
226
|
+
return list.map((item) => <span onClick={() => setHobby(item)}>{item.hobby}</span>)
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const Dome = () => {
|
|
230
|
+
const store = useReactive({
|
|
231
|
+
name: 'aic',
|
|
232
|
+
age: 12,
|
|
233
|
+
set: new Set,
|
|
234
|
+
map: new Map,
|
|
235
|
+
list: [{hobby: 'play game'}, {hobby: ''}]
|
|
236
|
+
});
|
|
237
|
+
return <Table list={toRaw(store.list)} setHobby={(item) => {
|
|
238
|
+
const hobby = toProxy(item);
|
|
239
|
+
hobby = 'init'
|
|
240
|
+
}} />
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### useStore
|
|
245
|
+
简单的 react hook 状态管理器
|
|
246
|
+
|
|
247
|
+
```ts
|
|
248
|
+
|
|
249
|
+
const Dome = () => {
|
|
250
|
+
const { store, setStore, resetStore, latestStore, setSilenceStore } = useStore(() => {
|
|
251
|
+
return {
|
|
252
|
+
name: 'aic',
|
|
253
|
+
age: 12
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
useEffect(() => {
|
|
257
|
+
setStore({
|
|
258
|
+
age: 24
|
|
259
|
+
})
|
|
260
|
+
}, []);
|
|
261
|
+
// 使用
|
|
262
|
+
return <div>{store.name}</div>
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
```
|