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.
Files changed (2) hide show
  1. package/README.md +263 -3
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,5 +1,265 @@
1
- # `@lexical/utils`
1
+ ## Base
2
+ ### _isMoment
3
+ 判断是否是Moment对象,并且不依赖moment包
2
4
 
3
- [![See API Documentation](https://lexical.dev/img/see-api-documentation.svg)](https://lexical.dev/docs/api/modules/lexical_utils)
5
+ ```ts
6
+ _isMoment({}) // falsesd
7
+ _isMoment(Moment()) // truea
8
+ ```
4
9
 
5
- This package contains misc utilities for Lexical.
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
+ ```
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "onchain-utility",
3
3
  "description": "This package contains misc utilities for onchain.",
4
4
  "license": "MIT",
5
- "version": "0.0.14",
5
+ "version": "0.0.15",
6
6
  "files": [
7
7
  "dist",
8
8
  "src"