@fast-china/utils 1.0.1 → 1.0.3

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 (143) hide show
  1. package/dist/index.global.js +13005 -63813
  2. package/dist/index.global.js.map +1 -1
  3. package/dist/index.global.min.js +38 -73
  4. package/dist/index.global.min.js.map +1 -1
  5. package/es/base64/index.d.ts +12 -0
  6. package/es/base64/index.mjs +132 -0
  7. package/es/base64/index.mjs.map +1 -0
  8. package/es/click/index.d.ts +30 -0
  9. package/es/click/index.mjs +82 -0
  10. package/es/click/index.mjs.map +1 -0
  11. package/es/color/index.d.ts +30 -0
  12. package/es/color/index.mjs +60 -0
  13. package/es/color/index.mjs.map +1 -0
  14. package/es/console/index.d.ts +25 -0
  15. package/es/console/index.mjs +44 -0
  16. package/es/console/index.mjs.map +1 -0
  17. package/es/crypto/index.d.ts +46 -0
  18. package/es/crypto/index.mjs +106 -0
  19. package/es/crypto/index.mjs.map +1 -0
  20. package/es/date/index.d.ts +24 -0
  21. package/es/date/index.mjs +251 -0
  22. package/es/date/index.mjs.map +1 -0
  23. package/es/dom/index.d.ts +1 -0
  24. package/es/dom/index.mjs +5 -0
  25. package/es/dom/index.mjs.map +1 -0
  26. package/es/dom/style.d.ts +6 -0
  27. package/es/dom/style.mjs +21 -0
  28. package/es/dom/style.mjs.map +1 -0
  29. package/es/error/index.d.ts +3 -0
  30. package/es/error/index.mjs +10 -0
  31. package/es/error/index.mjs.map +1 -0
  32. package/es/index.d.ts +12 -0
  33. package/es/index.es.d.ts +2 -0
  34. package/es/index.mjs +52 -0
  35. package/es/index.mjs.map +1 -0
  36. package/es/object/index.d.ts +21 -0
  37. package/es/object/index.mjs +118 -0
  38. package/es/object/index.mjs.map +1 -0
  39. package/es/storage/index.d.ts +95 -0
  40. package/es/storage/index.mjs +306 -0
  41. package/es/storage/index.mjs.map +1 -0
  42. package/es/string/index.d.ts +25 -0
  43. package/es/string/index.mjs +94 -0
  44. package/es/string/index.mjs.map +1 -0
  45. package/es/vue/expose.d.ts +4 -0
  46. package/es/vue/expose.mjs +8 -0
  47. package/es/vue/expose.mjs.map +1 -0
  48. package/es/vue/func.d.ts +6 -0
  49. package/es/vue/func.mjs +26 -0
  50. package/es/vue/func.mjs.map +1 -0
  51. package/es/vue/index.d.ts +7 -0
  52. package/es/vue/index.mjs +20 -0
  53. package/es/vue/index.mjs.map +1 -0
  54. package/es/vue/install.d.ts +5 -0
  55. package/es/vue/install.mjs +31 -0
  56. package/es/vue/install.mjs.map +1 -0
  57. package/es/vue/props.d.ts +9 -0
  58. package/es/vue/props.mjs +15 -0
  59. package/es/vue/props.mjs.map +1 -0
  60. package/es/vue/slots.d.ts +11 -0
  61. package/es/vue/slots.mjs +7 -0
  62. package/es/vue/slots.mjs.map +1 -0
  63. package/es/vue/useRender.d.ts +6 -0
  64. package/es/vue/useRender.mjs +12 -0
  65. package/es/vue/useRender.mjs.map +1 -0
  66. package/es/vue/with.d.ts +5 -0
  67. package/es/vue/with.mjs +7 -0
  68. package/es/vue/with.mjs.map +1 -0
  69. package/lib/base64/index.d.ts +12 -0
  70. package/lib/base64/index.js +2 -0
  71. package/lib/base64/index.js.map +1 -0
  72. package/lib/click/index.d.ts +30 -0
  73. package/lib/click/index.js +2 -0
  74. package/lib/click/index.js.map +1 -0
  75. package/lib/color/index.d.ts +30 -0
  76. package/lib/color/index.js +2 -0
  77. package/lib/color/index.js.map +1 -0
  78. package/lib/console/index.d.ts +25 -0
  79. package/lib/console/index.js +2 -0
  80. package/lib/console/index.js.map +1 -0
  81. package/lib/crypto/index.d.ts +46 -0
  82. package/lib/crypto/index.js +2 -0
  83. package/lib/crypto/index.js.map +1 -0
  84. package/lib/date/index.d.ts +24 -0
  85. package/lib/date/index.js +2 -0
  86. package/lib/date/index.js.map +1 -0
  87. package/lib/dom/index.d.ts +1 -0
  88. package/lib/dom/index.js +2 -0
  89. package/lib/dom/index.js.map +1 -0
  90. package/lib/dom/style.d.ts +6 -0
  91. package/lib/dom/style.js +2 -0
  92. package/lib/dom/style.js.map +1 -0
  93. package/lib/error/index.d.ts +3 -0
  94. package/lib/error/index.js +2 -0
  95. package/lib/error/index.js.map +1 -0
  96. package/lib/index.d.ts +12 -0
  97. package/lib/index.es.d.ts +2 -0
  98. package/lib/index.js +2 -0
  99. package/lib/index.js.map +1 -0
  100. package/lib/object/index.d.ts +21 -0
  101. package/lib/object/index.js +2 -0
  102. package/lib/object/index.js.map +1 -0
  103. package/lib/storage/index.d.ts +95 -0
  104. package/lib/storage/index.js +2 -0
  105. package/lib/storage/index.js.map +1 -0
  106. package/lib/string/index.d.ts +25 -0
  107. package/lib/string/index.js +2 -0
  108. package/lib/string/index.js.map +1 -0
  109. package/lib/vue/expose.d.ts +4 -0
  110. package/lib/vue/expose.js +2 -0
  111. package/lib/vue/expose.js.map +1 -0
  112. package/lib/vue/func.d.ts +6 -0
  113. package/lib/vue/func.js +2 -0
  114. package/lib/vue/func.js.map +1 -0
  115. package/lib/vue/index.d.ts +7 -0
  116. package/lib/vue/index.js +2 -0
  117. package/lib/vue/index.js.map +1 -0
  118. package/lib/vue/install.d.ts +5 -0
  119. package/lib/vue/install.js +2 -0
  120. package/lib/vue/install.js.map +1 -0
  121. package/lib/vue/props.d.ts +9 -0
  122. package/lib/vue/props.js +2 -0
  123. package/lib/vue/props.js.map +1 -0
  124. package/lib/vue/slots.d.ts +11 -0
  125. package/lib/vue/slots.js +2 -0
  126. package/lib/vue/slots.js.map +1 -0
  127. package/lib/vue/useRender.d.ts +6 -0
  128. package/lib/vue/useRender.js +2 -0
  129. package/lib/vue/useRender.js.map +1 -0
  130. package/lib/vue/with.d.ts +5 -0
  131. package/lib/vue/with.js +2 -0
  132. package/lib/vue/with.js.map +1 -0
  133. package/package.json +92 -81
  134. package/dist/index.cjs +0 -1294
  135. package/dist/index.cjs.map +0 -1
  136. package/dist/index.d.cts +0 -380
  137. package/dist/index.d.ts +0 -380
  138. package/dist/index.js +0 -1264
  139. package/dist/index.js.map +0 -1
  140. package/dist/index.min.cjs +0 -3
  141. package/dist/index.min.cjs.map +0 -1
  142. package/dist/index.min.js +0 -3
  143. package/dist/index.min.js.map +0 -1
@@ -0,0 +1,306 @@
1
+ import { reactive, computed } from "vue";
2
+ import { base64Util } from "../base64/index.mjs";
3
+ import { consoleError } from "../console/index.mjs";
4
+ const state = reactive({
5
+ prefix: "fast__",
6
+ expireSuffix: "__Expire",
7
+ crypto: false
8
+ });
9
+ const CACHE_PREFIX = computed(() => state.prefix);
10
+ const CACHE_EXPIRE_SUFFIX = computed(() => state.expireSuffix);
11
+ const useStorage = () => {
12
+ return {
13
+ /**
14
+ * 设置缓存前缀 Key
15
+ * @param key
16
+ */
17
+ prefix(key) {
18
+ state.prefix = key;
19
+ },
20
+ /**
21
+ * 缓存过期值后缀 Key
22
+ * @param key
23
+ */
24
+ expireSuffix(key) {
25
+ state.expireSuffix = key;
26
+ },
27
+ /**
28
+ * 设置缓存是否加密
29
+ * @param crypto
30
+ */
31
+ crypto(crypto) {
32
+ state.crypto = crypto;
33
+ }
34
+ };
35
+ };
36
+ const storage = {
37
+ set(key, val) {
38
+ if (typeof uni !== "undefined") {
39
+ uni.setStorageSync(key, val);
40
+ } else {
41
+ window.localStorage.setItem(key, val);
42
+ }
43
+ },
44
+ get(key) {
45
+ if (typeof uni !== "undefined") {
46
+ return uni.getStorageSync(key);
47
+ } else {
48
+ return window.localStorage.getItem(key);
49
+ }
50
+ },
51
+ remove(key) {
52
+ if (typeof uni !== "undefined") {
53
+ uni.removeStorageSync(key);
54
+ } else {
55
+ window.localStorage.removeItem(key);
56
+ }
57
+ },
58
+ clear() {
59
+ if (typeof uni !== "undefined") {
60
+ uni.clearStorageSync();
61
+ } else {
62
+ window.localStorage.clear();
63
+ }
64
+ },
65
+ keys() {
66
+ if (typeof uni !== "undefined") {
67
+ return uni.getStorageInfoSync().keys;
68
+ } else {
69
+ return window.localStorage;
70
+ }
71
+ }
72
+ };
73
+ const Local = {
74
+ /**
75
+ * 设置
76
+ * @param key 缓存的Key
77
+ * @param val 缓存值
78
+ * @param expire 过期时间,单位分钟
79
+ * @param encrypt 是否对缓存的数据加密
80
+ */
81
+ set(key, val, expire, encrypt) {
82
+ try {
83
+ encrypt ?? (encrypt = state.crypto);
84
+ if (expire) {
85
+ if (isNaN(expire) || expire < 1) {
86
+ throw new Error("有效期应为一个有效数值");
87
+ }
88
+ const expireData = {
89
+ time: Date.now(),
90
+ expire
91
+ };
92
+ const expireJson = JSON.stringify(expireData);
93
+ storage.set(`${state.prefix}${key}${state.expireSuffix}`, expireJson);
94
+ }
95
+ let valJson = JSON.stringify(val);
96
+ if (encrypt) {
97
+ valJson = base64Util.toBase64(valJson);
98
+ }
99
+ storage.set(`${state.prefix}${key}`, valJson);
100
+ } catch (error) {
101
+ consoleError("Local", error);
102
+ }
103
+ },
104
+ /**
105
+ * 获取
106
+ * @param key 缓存的Key
107
+ * @param decrypt 是否对缓存的数据解密
108
+ * @returns {T} 传入的对象类型,默认为 string
109
+ */
110
+ get(key, decrypt) {
111
+ try {
112
+ decrypt ?? (decrypt = state.crypto);
113
+ let valJson = storage.get(`${state.prefix}${key}`);
114
+ if (valJson) {
115
+ if (decrypt) {
116
+ valJson = base64Util.base64ToStr(valJson);
117
+ }
118
+ const expireJson = storage.get(`${state.prefix}${key}${state.expireSuffix}`);
119
+ if (expireJson) {
120
+ const expireData = JSON.parse(expireJson);
121
+ if (Date.now() > expireData.time + expireData.expire * 60 * 1e3) {
122
+ storage.remove(`${state.prefix}${key}`);
123
+ storage.remove(`${state.prefix}${key}${state.expireSuffix}`);
124
+ return null;
125
+ }
126
+ }
127
+ try {
128
+ return JSON.parse(valJson);
129
+ } catch {
130
+ return valJson;
131
+ }
132
+ }
133
+ return null;
134
+ } catch (error) {
135
+ consoleError("Local", error);
136
+ }
137
+ },
138
+ /**
139
+ * 移除
140
+ * @param key 缓存的Key
141
+ */
142
+ remove(key) {
143
+ try {
144
+ storage.remove(`${state.prefix}${key}`);
145
+ storage.remove(`${state.prefix}${key}${state.expireSuffix}`);
146
+ } catch (error) {
147
+ consoleError("Local", error);
148
+ }
149
+ },
150
+ /**
151
+ * 根据前缀移除
152
+ * @param key 缓存的Key
153
+ */
154
+ removeByPrefix(key) {
155
+ try {
156
+ for (const itemKey in storage.keys) {
157
+ if (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {
158
+ storage.remove(itemKey);
159
+ }
160
+ }
161
+ } catch (error) {
162
+ consoleError("Local", error);
163
+ }
164
+ },
165
+ /**
166
+ * 移除全部
167
+ */
168
+ clear() {
169
+ try {
170
+ storage.clear();
171
+ } catch (error) {
172
+ consoleError("Local", error);
173
+ }
174
+ }
175
+ };
176
+ const Session = {
177
+ /**
178
+ * 设置会话缓存
179
+ * @param key 缓存的Key
180
+ * @param val 缓存值
181
+ * @param expire 过期时间,单位分钟
182
+ * @param encrypt 是否对缓存的数据加密
183
+ */
184
+ set(key, val, expire, encrypt) {
185
+ if (typeof uni !== "undefined") {
186
+ consoleError("Session", "UniApp 环境下 [Session] 不可用。");
187
+ return;
188
+ }
189
+ try {
190
+ encrypt ?? (encrypt = state.crypto);
191
+ if (expire) {
192
+ if (isNaN(expire) || expire < 1) {
193
+ throw new Error("有效期应为一个有效数值");
194
+ }
195
+ const expireData = {
196
+ time: Date.now(),
197
+ expire
198
+ };
199
+ const expireJson = JSON.stringify(expireData);
200
+ window.sessionStorage.setItem(`${state.prefix}${key}${state.expireSuffix}`, expireJson);
201
+ }
202
+ let valJson = JSON.stringify(val);
203
+ if (encrypt) {
204
+ valJson = base64Util.toBase64(valJson);
205
+ }
206
+ window.sessionStorage.setItem(`${state.prefix}${key}`, valJson);
207
+ } catch (error) {
208
+ consoleError("Session", error);
209
+ }
210
+ },
211
+ /**
212
+ * 获取会话缓存
213
+ * @param key 缓存的Key
214
+ * @param decrypt 是否对缓存的数据解密
215
+ * @returns {T} 传入的对象类型,默认为 string
216
+ */
217
+ get(key, decrypt) {
218
+ if (typeof uni !== "undefined") {
219
+ consoleError("Session", "UniApp 环境下 [Session] 不可用。");
220
+ return;
221
+ }
222
+ try {
223
+ decrypt ?? (decrypt = state.crypto);
224
+ let valJson = window.sessionStorage.getItem(`${state.prefix}${key}`);
225
+ if (valJson) {
226
+ if (decrypt) {
227
+ valJson = base64Util.base64ToStr(valJson);
228
+ }
229
+ const expireJson = window.sessionStorage.getItem(`${state.prefix}${key}${state.expireSuffix}`);
230
+ if (expireJson) {
231
+ const expireData = JSON.parse(expireJson);
232
+ if (Date.now() > expireData.time + expireData.expire * 60 * 1e3) {
233
+ window.sessionStorage.removeItem(`${state.prefix}${key}`);
234
+ window.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);
235
+ return null;
236
+ }
237
+ }
238
+ try {
239
+ return JSON.parse(valJson);
240
+ } catch {
241
+ return valJson;
242
+ }
243
+ }
244
+ return null;
245
+ } catch (error) {
246
+ consoleError("Session", error);
247
+ }
248
+ },
249
+ /**
250
+ * 移除会话缓存
251
+ * @param key 缓存的Key
252
+ */
253
+ remove(key) {
254
+ if (typeof uni !== "undefined") {
255
+ consoleError("Session", "UniApp 环境下 [Session] 不可用。");
256
+ return;
257
+ }
258
+ try {
259
+ window.sessionStorage.removeItem(`${state.prefix}${key}`);
260
+ window.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);
261
+ } catch (error) {
262
+ consoleError("Session", error);
263
+ }
264
+ },
265
+ /**
266
+ * 根据前缀移除会话缓存
267
+ * @param key 缓存的Key
268
+ */
269
+ removeByPrefix(key) {
270
+ if (typeof uni !== "undefined") {
271
+ consoleError("Session", "UniApp 环境下 [Session] 不可用。");
272
+ return;
273
+ }
274
+ try {
275
+ for (const itemKey in window.sessionStorage) {
276
+ if (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {
277
+ window.sessionStorage.removeItem(itemKey);
278
+ }
279
+ }
280
+ } catch (error) {
281
+ consoleError("Session", error);
282
+ }
283
+ },
284
+ /**
285
+ * 移除全部会话缓存
286
+ */
287
+ clear() {
288
+ if (typeof uni !== "undefined") {
289
+ consoleError("Session", "UniApp 环境下 [Session] 不可用。");
290
+ return;
291
+ }
292
+ try {
293
+ window.sessionStorage.clear();
294
+ } catch (error) {
295
+ consoleError("Session", error);
296
+ }
297
+ }
298
+ };
299
+ export {
300
+ CACHE_EXPIRE_SUFFIX,
301
+ CACHE_PREFIX,
302
+ Local,
303
+ Session,
304
+ useStorage
305
+ };
306
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/storage/index.ts"],"sourcesContent":["import { computed, reactive } from \"vue\";\nimport { base64Util } from \"../base64\";\nimport { consoleError } from \"../console\";\n\nconst state = reactive({\n\tprefix: \"fast__\",\n\texpireSuffix: \"__Expire\",\n\tcrypto: false,\n});\n\n/**\n * 本地缓存前缀 Key\n */\nexport const CACHE_PREFIX = computed(() => state.prefix);\n\n/**\n * 本地缓存过期值后缀 Key\n */\nexport const CACHE_EXPIRE_SUFFIX = computed(() => state.expireSuffix);\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport const useStorage = () => {\n\treturn {\n\t\t/**\n\t\t * 设置缓存前缀 Key\n\t\t * @param key\n\t\t */\n\t\tprefix(key: string): void {\n\t\t\tstate.prefix = key;\n\t\t},\n\t\t/**\n\t\t * 缓存过期值后缀 Key\n\t\t * @param key\n\t\t */\n\t\texpireSuffix(key: string): void {\n\t\t\tstate.expireSuffix = key;\n\t\t},\n\t\t/**\n\t\t * 设置缓存是否加密\n\t\t * @param crypto\n\t\t */\n\t\tcrypto(crypto: boolean): void {\n\t\t\tstate.crypto = crypto;\n\t\t},\n\t};\n};\n\nconst storage = {\n\tset(key: string, val: any): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.setStorageSync(key, val);\n\t\t} else {\n\t\t\twindow.localStorage.setItem(key, val);\n\t\t}\n\t},\n\tget(key: string): string | any | null {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\treturn uni.getStorageSync(key);\n\t\t} else {\n\t\t\treturn window.localStorage.getItem(key);\n\t\t}\n\t},\n\tremove(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.removeStorageSync(key);\n\t\t} else {\n\t\t\twindow.localStorage.removeItem(key);\n\t\t}\n\t},\n\tclear(): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tuni.clearStorageSync();\n\t\t} else {\n\t\t\twindow.localStorage.clear();\n\t\t}\n\t},\n\tkeys(): string[] | Storage {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\treturn uni.getStorageInfoSync().keys;\n\t\t} else {\n\t\t\treturn window.localStorage;\n\t\t}\n\t},\n};\n\n/**\n * window.localStorage\n * - 如果是 UniApp 环境则使用的是 uni.xxxStorage\n */\nexport const Local = {\n\t/**\n\t * 设置\n\t * @param key 缓存的Key\n\t * @param val 缓存值\n\t * @param expire 过期时间,单位分钟\n\t * @param encrypt 是否对缓存的数据加密\n\t */\n\tset(key: string, val: any, expire?: number, encrypt?: boolean): void {\n\t\ttry {\n\t\t\tencrypt ??= state.crypto;\n\t\t\t// 判断是否存在缓存过期时间\n\t\t\tif (expire) {\n\t\t\t\tif (isNaN(expire) || expire < 1) {\n\t\t\t\t\tthrow new Error(\"有效期应为一个有效数值\");\n\t\t\t\t}\n\t\t\t\t// 设置过期时间的缓存\n\t\t\t\tconst expireData = {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\texpire,\n\t\t\t\t};\n\t\t\t\tconst expireJson = JSON.stringify(expireData);\n\t\t\t\tstorage.set(`${state.prefix}${key}${state.expireSuffix}`, expireJson);\n\t\t\t}\n\t\t\tlet valJson = JSON.stringify(val);\n\t\t\tif (encrypt) {\n\t\t\t\tvalJson = base64Util.toBase64(valJson);\n\t\t\t}\n\t\t\tstorage.set(`${state.prefix}${key}`, valJson);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 获取\n\t * @param key 缓存的Key\n\t * @param decrypt 是否对缓存的数据解密\n\t * @returns {T} 传入的对象类型,默认为 string\n\t */\n\tget<T = string>(key: string, decrypt?: boolean): T {\n\t\ttry {\n\t\t\tdecrypt ??= state.crypto;\n\t\t\t// 获取缓存 JSON 字符串\n\t\t\tlet valJson = storage.get(`${state.prefix}${key}`);\n\n\t\t\tif (valJson) {\n\t\t\t\t// 判断是否解密\n\t\t\t\tif (decrypt) {\n\t\t\t\t\tvalJson = base64Util.base64ToStr(valJson);\n\t\t\t\t}\n\t\t\t\t// 尝试获取缓存过期时间的 JSON 字符串\n\t\t\t\tconst expireJson = storage.get(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t// 判断是否存在过期时间\n\t\t\t\tif (expireJson) {\n\t\t\t\t\tconst expireData = JSON.parse(expireJson);\n\t\t\t\t\tif (Date.now() > expireData.time + expireData.expire * 60 * 1000) {\n\t\t\t\t\t\t// 过期了,删除对应的缓存数据\n\t\t\t\t\t\tstorage.remove(`${state.prefix}${key}`);\n\t\t\t\t\t\tstorage.remove(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(valJson) as T;\n\t\t\t\t} catch {\n\t\t\t\t\treturn valJson as T;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除\n\t * @param key 缓存的Key\n\t */\n\tremove(key: string): void {\n\t\ttry {\n\t\t\tstorage.remove(`${state.prefix}${key}`);\n\t\t\tstorage.remove(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 根据前缀移除\n\t * @param key 缓存的Key\n\t */\n\tremoveByPrefix(key: string): void {\n\t\ttry {\n\t\t\tfor (const itemKey in storage.keys) {\n\t\t\t\tif (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {\n\t\t\t\t\tstorage.remove(itemKey);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除全部\n\t */\n\tclear(): void {\n\t\ttry {\n\t\t\tstorage.clear();\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Local\", error);\n\t\t}\n\t},\n};\n\n/**\n * window.sessionStorage\n * - UniApp 环境下不可用\n */\nexport const Session = {\n\t/**\n\t * 设置会话缓存\n\t * @param key 缓存的Key\n\t * @param val 缓存值\n\t * @param expire 过期时间,单位分钟\n\t * @param encrypt 是否对缓存的数据加密\n\t */\n\tset(key: string, val: any, expire?: number, encrypt?: boolean): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tencrypt ??= state.crypto;\n\t\t\t// 判断是否存在缓存过期时间\n\t\t\tif (expire) {\n\t\t\t\tif (isNaN(expire) || expire < 1) {\n\t\t\t\t\tthrow new Error(\"有效期应为一个有效数值\");\n\t\t\t\t}\n\t\t\t\t// 设置过期时间的缓存\n\t\t\t\tconst expireData = {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\texpire,\n\t\t\t\t};\n\t\t\t\tconst expireJson = JSON.stringify(expireData);\n\t\t\t\twindow.sessionStorage.setItem(`${state.prefix}${key}${state.expireSuffix}`, expireJson);\n\t\t\t}\n\t\t\tlet valJson = JSON.stringify(val);\n\t\t\tif (encrypt) {\n\t\t\t\tvalJson = base64Util.toBase64(valJson);\n\t\t\t}\n\t\t\twindow.sessionStorage.setItem(`${state.prefix}${key}`, valJson);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 获取会话缓存\n\t * @param key 缓存的Key\n\t * @param decrypt 是否对缓存的数据解密\n\t * @returns {T} 传入的对象类型,默认为 string\n\t */\n\tget<T = string>(key: string, decrypt?: boolean): T {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tdecrypt ??= state.crypto;\n\t\t\t// 获取缓存 JSON 字符串\n\t\t\tlet valJson = window.sessionStorage.getItem(`${state.prefix}${key}`);\n\t\t\tif (valJson) {\n\t\t\t\t// 判断是否解密\n\t\t\t\tif (decrypt) {\n\t\t\t\t\tvalJson = base64Util.base64ToStr(valJson);\n\t\t\t\t}\n\t\t\t\t// 尝试获取缓存过期时间的 JSON 字符串\n\t\t\t\tconst expireJson = window.sessionStorage.getItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t// 判断是否存在过期时间\n\t\t\t\tif (expireJson) {\n\t\t\t\t\tconst expireData = JSON.parse(expireJson);\n\t\t\t\t\tif (Date.now() > expireData.time + expireData.expire * 60 * 1000) {\n\t\t\t\t\t\t// 过期了,删除对应的缓存数据\n\t\t\t\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}`);\n\t\t\t\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\treturn JSON.parse(valJson) as T;\n\t\t\t\t} catch {\n\t\t\t\t\treturn valJson as T;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除会话缓存\n\t * @param key 缓存的Key\n\t */\n\tremove(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}`);\n\t\t\twindow.sessionStorage.removeItem(`${state.prefix}${key}${state.expireSuffix}`);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 根据前缀移除会话缓存\n\t * @param key 缓存的Key\n\t */\n\tremoveByPrefix(key: string): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tfor (const itemKey in window.sessionStorage) {\n\t\t\t\tif (itemKey.indexOf(`${state.prefix}${key}`) !== -1) {\n\t\t\t\t\twindow.sessionStorage.removeItem(itemKey);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n\t/**\n\t * 移除全部会话缓存\n\t */\n\tclear(): void {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\tconsoleError(\"Session\", \"UniApp 环境下 [Session] 不可用。\");\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\twindow.sessionStorage.clear();\n\t\t} catch (error) {\n\t\t\tconsoleError(\"Session\", error);\n\t\t}\n\t},\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 字符串工具类
3
+ */
4
+ export declare const stringUtil: {
5
+ /**
6
+ * 获取Url参数
7
+ */
8
+ getUrlParams(url: string): Record<string, any>;
9
+ /**
10
+ * 是否为JSON字符串
11
+ */
12
+ isJson(value: string): boolean;
13
+ /**
14
+ * 生成随机字符串
15
+ */
16
+ generateRandomString(length: number): string;
17
+ /**
18
+ * @description 生成唯一 uuid
19
+ */
20
+ generateUUID(): string;
21
+ /**
22
+ * 复制
23
+ */
24
+ copy(value: string): Promise<void>;
25
+ };
@@ -0,0 +1,94 @@
1
+ import { isString } from "lodash-unified";
2
+ const stringUtil = {
3
+ /**
4
+ * 获取Url参数
5
+ */
6
+ getUrlParams(url) {
7
+ const regex = /[?&][^=?&]+=[^?&]+/g;
8
+ const params = {};
9
+ let match;
10
+ while ((match = regex.exec(url)) !== null) {
11
+ const [key, value] = match[0].substring(1).split("=");
12
+ params[key] = decodeURIComponent(value);
13
+ }
14
+ return params;
15
+ },
16
+ /**
17
+ * 是否为JSON字符串
18
+ */
19
+ isJson(value) {
20
+ if (!isString(value)) return false;
21
+ value = value.replace(/\s/g, "").replace(/\n|\r/, "");
22
+ if (/^\{(.*?)\}$/.test(value)) return /"(.*?)":(.*?)/g.test(value);
23
+ if (/^\[(.*?)\]$/.test(value)) {
24
+ return value.replace(/^\[/, "").replace(/\]$/, "").replace(/},{/g, "}\n{").split(/\n/).map((s) => {
25
+ return stringUtil.isJson(s);
26
+ }).reduce((prev, curr) => {
27
+ return !!curr;
28
+ });
29
+ }
30
+ return false;
31
+ },
32
+ /**
33
+ * 生成随机字符串
34
+ */
35
+ generateRandomString(length) {
36
+ const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
37
+ let randomString = "";
38
+ for (let i = 0; i < length; i++) {
39
+ const randomIndex = Math.floor(Math.random() * characters.length);
40
+ randomString += characters.charAt(randomIndex);
41
+ }
42
+ return randomString;
43
+ },
44
+ /**
45
+ * @description 生成唯一 uuid
46
+ */
47
+ generateUUID() {
48
+ let uuid = "";
49
+ for (let i = 0; i < 32; i++) {
50
+ const random = Math.random() * 16 | 0;
51
+ if (i === 8 || i === 12 || i === 16 || i === 20) uuid += "-";
52
+ uuid += (i === 12 ? 4 : i === 16 ? random & 3 | 8 : random).toString(16);
53
+ }
54
+ return uuid;
55
+ },
56
+ /**
57
+ * 复制
58
+ */
59
+ async copy(value) {
60
+ if (typeof uni !== "undefined") {
61
+ return new Promise((resolve, reject) => {
62
+ uni.setClipboardData({
63
+ data: value,
64
+ success: () => {
65
+ resolve();
66
+ },
67
+ fail: () => {
68
+ reject();
69
+ }
70
+ });
71
+ });
72
+ } else {
73
+ if ((navigator == null ? void 0 : navigator.clipboard) && window.isSecureContext) {
74
+ await navigator.clipboard.writeText(value);
75
+ } else {
76
+ const textareaEl = document.createElement("textarea");
77
+ textareaEl.value = value;
78
+ textareaEl.style.position = "absolute";
79
+ textareaEl.style.opacity = "0";
80
+ textareaEl.style.left = "-999999px";
81
+ textareaEl.style.top = "-999999px";
82
+ document.body.appendChild(textareaEl);
83
+ textareaEl.focus();
84
+ textareaEl.select();
85
+ document.execCommand("copy");
86
+ textareaEl.remove();
87
+ }
88
+ }
89
+ }
90
+ };
91
+ export {
92
+ stringUtil
93
+ };
94
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../../src/string/index.ts"],"sourcesContent":["import { isString } from \"lodash-unified\";\n\n/**\n * 字符串工具类\n */\nexport const stringUtil = {\n\t/**\n\t * 获取Url参数\n\t */\n\tgetUrlParams(url: string): Record<string, any> {\n\t\tconst regex = /[?&][^=?&]+=[^?&]+/g;\n\t\tconst params: Record<string, any> = {};\n\n\t\tlet match;\n\t\twhile ((match = regex.exec(url)) !== null) {\n\t\t\tconst [key, value] = match[0].substring(1).split(\"=\");\n\t\t\tparams[key] = decodeURIComponent(value);\n\t\t}\n\n\t\treturn params;\n\t},\n\t/**\n\t * 是否为JSON字符串\n\t */\n\tisJson(value: string): boolean {\n\t\tif (!isString(value)) return false;\n\n\t\tvalue = value.replace(/\\s/g, \"\").replace(/\\n|\\r/, \"\");\n\n\t\tif (/^\\{(.*?)\\}$/.test(value)) return /\"(.*?)\":(.*?)/g.test(value);\n\n\t\tif (/^\\[(.*?)\\]$/.test(value)) {\n\t\t\treturn value\n\t\t\t\t.replace(/^\\[/, \"\")\n\t\t\t\t.replace(/\\]$/, \"\")\n\t\t\t\t.replace(/},{/g, \"}\\n{\")\n\t\t\t\t.split(/\\n/)\n\t\t\t\t.map((s) => {\n\t\t\t\t\treturn stringUtil.isJson(s);\n\t\t\t\t})\n\t\t\t\t.reduce((prev, curr) => {\n\t\t\t\t\treturn !!curr;\n\t\t\t\t});\n\t\t}\n\n\t\treturn false;\n\t},\n\t/**\n\t * 生成随机字符串\n\t */\n\tgenerateRandomString(length: number): string {\n\t\tconst characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\t\tlet randomString = \"\";\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\t\trandomString += characters.charAt(randomIndex);\n\t\t}\n\t\treturn randomString;\n\t},\n\t/**\n\t * @description 生成唯一 uuid\n\t */\n\tgenerateUUID(): string {\n\t\tlet uuid = \"\";\n\t\tfor (let i = 0; i < 32; i++) {\n\t\t\tconst random = (Math.random() * 16) | 0;\n\t\t\tif (i === 8 || i === 12 || i === 16 || i === 20) uuid += \"-\";\n\t\t\tuuid += (i === 12 ? 4 : i === 16 ? (random & 3) | 8 : random).toString(16);\n\t\t}\n\t\treturn uuid;\n\t},\n\t/**\n\t * 复制\n\t */\n\tasync copy(value: string): Promise<void> {\n\t\tif (typeof uni !== \"undefined\") {\n\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\tuni.setClipboardData({\n\t\t\t\t\tdata: value,\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t},\n\t\t\t\t\tfail: () => {\n\t\t\t\t\t\treject();\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\t// navigator.clipboard 需要https等安全上下文\n\t\t\tif (navigator?.clipboard && window.isSecureContext) {\n\t\t\t\tawait navigator.clipboard.writeText(value);\n\t\t\t} else {\n\t\t\t\tconst textareaEl = document.createElement(\"textarea\");\n\t\t\t\ttextareaEl.value = value;\n\t\t\t\t// 使文本域不显示\n\t\t\t\ttextareaEl.style.position = \"absolute\";\n\t\t\t\ttextareaEl.style.opacity = \"0\";\n\t\t\t\ttextareaEl.style.left = \"-999999px\";\n\t\t\t\ttextareaEl.style.top = \"-999999px\";\n\t\t\t\tdocument.body.appendChild(textareaEl);\n\t\t\t\ttextareaEl.focus();\n\t\t\t\ttextareaEl.select();\n\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\ttextareaEl.remove();\n\t\t\t}\n\t\t}\n\t},\n};\n"],"names":[],"mappings":";AAKO,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA,EAIzB,aAAa,KAAkC;AAC9C,UAAM,QAAQ;AACd,UAAM,SAA8B,CAAC;AAEjC,QAAA;AACJ,YAAQ,QAAQ,MAAM,KAAK,GAAG,OAAO,MAAM;AACpC,YAAA,CAAC,KAAK,KAAK,IAAI,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG;AAC7C,aAAA,GAAG,IAAI,mBAAmB,KAAK;AAAA,IAAA;AAGhC,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,OAAO,OAAwB;AAC9B,QAAI,CAAC,SAAS,KAAK,EAAU,QAAA;AAE7B,YAAQ,MAAM,QAAQ,OAAO,EAAE,EAAE,QAAQ,SAAS,EAAE;AAEpD,QAAI,cAAc,KAAK,KAAK,EAAU,QAAA,iBAAiB,KAAK,KAAK;AAE7D,QAAA,cAAc,KAAK,KAAK,GAAG;AAC9B,aAAO,MACL,QAAQ,OAAO,EAAE,EACjB,QAAQ,OAAO,EAAE,EACjB,QAAQ,QAAQ,MAAM,EACtB,MAAM,IAAI,EACV,IAAI,CAAC,MAAM;AACJ,eAAA,WAAW,OAAO,CAAC;AAAA,MAC1B,CAAA,EACA,OAAO,CAAC,MAAM,SAAS;AACvB,eAAO,CAAC,CAAC;AAAA,MAAA,CACT;AAAA,IAAA;AAGI,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,qBAAqB,QAAwB;AAC5C,UAAM,aAAa;AACnB,QAAI,eAAe;AACnB,aAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAChC,YAAM,cAAc,KAAK,MAAM,KAAK,OAAO,IAAI,WAAW,MAAM;AAChD,sBAAA,WAAW,OAAO,WAAW;AAAA,IAAA;AAEvC,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,eAAuB;AACtB,QAAI,OAAO;AACX,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC5B,YAAM,SAAU,KAAK,OAAO,IAAI,KAAM;AAClC,UAAA,MAAM,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,GAAY,SAAA;AAChD,eAAA,MAAM,KAAK,IAAI,MAAM,KAAM,SAAS,IAAK,IAAI,QAAQ,SAAS,EAAE;AAAA,IAAA;AAEnE,WAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,KAAK,OAA8B;AACpC,QAAA,OAAO,QAAQ,aAAa;AAC/B,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,YAAI,iBAAiB;AAAA,UACpB,MAAM;AAAA,UACN,SAAS,MAAM;AACN,oBAAA;AAAA,UACT;AAAA,UACA,MAAM,MAAM;AACJ,mBAAA;AAAA,UAAA;AAAA,QACR,CACA;AAAA,MAAA,CACD;AAAA,IAAA,OACK;AAEF,WAAA,uCAAW,cAAa,OAAO,iBAAiB;AAC7C,cAAA,UAAU,UAAU,UAAU,KAAK;AAAA,MAAA,OACnC;AACA,cAAA,aAAa,SAAS,cAAc,UAAU;AACpD,mBAAW,QAAQ;AAEnB,mBAAW,MAAM,WAAW;AAC5B,mBAAW,MAAM,UAAU;AAC3B,mBAAW,MAAM,OAAO;AACxB,mBAAW,MAAM,MAAM;AACd,iBAAA,KAAK,YAAY,UAAU;AACpC,mBAAW,MAAM;AACjB,mBAAW,OAAO;AAClB,iBAAS,YAAY,MAAM;AAC3B,mBAAW,OAAO;AAAA,MAAA;AAAA,IACnB;AAAA,EACD;AAEF;"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 构建 expose 和 vue.js devtools 状态查看
3
+ */
4
+ export declare const useExpose: <Exposed extends Record<string, any> = Record<string, any>>(expose: (exposed?: Exposed) => void, exposed?: Exposed) => Exposed;
@@ -0,0 +1,8 @@
1
+ const useExpose = (expose, exposed) => {
2
+ expose(exposed);
3
+ return exposed;
4
+ };
5
+ export {
6
+ useExpose
7
+ };
8
+ //# sourceMappingURL=expose.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expose.mjs","sources":["../../../../src/vue/expose.ts"],"sourcesContent":["/**\n * 构建 expose 和 vue.js devtools 状态查看\n */\nexport const useExpose = <Exposed extends Record<string, any> = Record<string, any>>(\n\texpose: (exposed?: Exposed) => void,\n\texposed?: Exposed\n): Exposed => {\n\texpose(exposed);\n\n\treturn exposed;\n};\n"],"names":[],"mappings":"AAGa,MAAA,YAAY,CACxB,QACA,YACa;AACb,SAAO,OAAO;AAEP,SAAA;AACR;"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 执行方法
3
+ * @param fn 要执行的方法
4
+ * @param args 参数
5
+ */
6
+ export declare const execFunction: <T = void>(fn: Function, ...args: any[]) => Promise<T>;
@@ -0,0 +1,26 @@
1
+ import { consoleError } from "../console/index.mjs";
2
+ const execFunction = async (fn, ...args) => {
3
+ if (!fn) return Promise.resolve(void 0);
4
+ if (fn.constructor.name === "AsyncFunction") {
5
+ try {
6
+ return await fn(...args);
7
+ } catch (error) {
8
+ consoleError("execFunction", error);
9
+ return Promise.reject(error);
10
+ }
11
+ } else {
12
+ return new Promise((resolve, reject) => {
13
+ try {
14
+ const res = fn(...args);
15
+ return resolve(res);
16
+ } catch (error) {
17
+ consoleError("execFunction", error);
18
+ return reject(error);
19
+ }
20
+ });
21
+ }
22
+ };
23
+ export {
24
+ execFunction
25
+ };
26
+ //# sourceMappingURL=func.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"func.mjs","sources":["../../../../src/vue/func.ts"],"sourcesContent":["/**\n * 执行方法\n * @param fn 要执行的方法\n * @param args 参数\n */\n\nimport { consoleError } from \"../console\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const execFunction = async <T = void>(fn: Function, ...args: any[]): Promise<T> => {\n\tif (!fn) return Promise.resolve(undefined);\n\t// 判断是否为异步方法\n\tif (fn.constructor.name === \"AsyncFunction\") {\n\t\t// 异步方法\n\t\ttry {\n\t\t\treturn await fn(...args);\n\t\t} catch (error) {\n\t\t\tconsoleError(\"execFunction\", error as any);\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t} else {\n\t\t// 同步方法\n\t\treturn new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst res = fn(...args);\n\t\t\t\treturn resolve(res);\n\t\t\t} catch (error) {\n\t\t\t\tconsoleError(\"execFunction\", error as any);\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t});\n\t}\n};\n"],"names":[],"mappings":";AASa,MAAA,eAAe,OAAiB,OAAiB,SAA4B;AACzF,MAAI,CAAC,GAAW,QAAA,QAAQ,QAAQ,MAAS;AAErC,MAAA,GAAG,YAAY,SAAS,iBAAiB;AAExC,QAAA;AACI,aAAA,MAAM,GAAG,GAAG,IAAI;AAAA,aACf,OAAO;AACf,mBAAa,gBAAgB,KAAY;AAClC,aAAA,QAAQ,OAAO,KAAK;AAAA,IAAA;AAAA,EAC5B,OACM;AAEN,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACnC,UAAA;AACG,cAAA,MAAM,GAAG,GAAG,IAAI;AACtB,eAAO,QAAQ,GAAG;AAAA,eACV,OAAO;AACf,qBAAa,gBAAgB,KAAY;AACzC,eAAO,OAAO,KAAK;AAAA,MAAA;AAAA,IACpB,CACA;AAAA,EAAA;AAEH;"}
@@ -0,0 +1,7 @@
1
+ export * from './expose';
2
+ export * from './func';
3
+ export * from './install';
4
+ export * from './props';
5
+ export * from './slots';
6
+ export * from './useRender';
7
+ export * from './with';
@@ -0,0 +1,20 @@
1
+ import { useExpose } from "./expose.mjs";
2
+ import { execFunction } from "./func.mjs";
3
+ import { withInstall, withInstallDirective, withNoopInstall } from "./install.mjs";
4
+ import { definePropType, useProps } from "./props.mjs";
5
+ import { makeSlots } from "./slots.mjs";
6
+ import { useRender } from "./useRender.mjs";
7
+ import { withDefineType } from "./with.mjs";
8
+ export {
9
+ definePropType,
10
+ execFunction,
11
+ makeSlots,
12
+ useExpose,
13
+ useProps,
14
+ useRender,
15
+ withDefineType,
16
+ withInstall,
17
+ withInstallDirective,
18
+ withNoopInstall
19
+ };
20
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,5 @@
1
+ import { Directive, Plugin } from 'vue';
2
+ export type TSXWithInstall<T> = T & Plugin;
3
+ export declare const withInstall: <T, E extends Record<string, any>>(main: T, extra?: E) => TSXWithInstall<T> & E;
4
+ export declare const withNoopInstall: <T>(component: T) => TSXWithInstall<T>;
5
+ export declare const withInstallDirective: <T extends Directive>(directive: T, name: string) => TSXWithInstall<T>;
@@ -0,0 +1,31 @@
1
+ const NOOP = () => {
2
+ };
3
+ const withInstall = (main, extra) => {
4
+ main.install = (app) => {
5
+ for (const comp of [main, ...Object.values(extra ?? {})]) {
6
+ app.component(comp.name, comp);
7
+ }
8
+ };
9
+ if (extra) {
10
+ for (const [key, comp] of Object.entries(extra)) {
11
+ main[key] = comp;
12
+ }
13
+ }
14
+ return main;
15
+ };
16
+ const withNoopInstall = (component) => {
17
+ component.install = NOOP;
18
+ return component;
19
+ };
20
+ const withInstallDirective = (directive, name) => {
21
+ directive.install = (app) => {
22
+ app.directive(name, directive);
23
+ };
24
+ return directive;
25
+ };
26
+ export {
27
+ withInstall,
28
+ withInstallDirective,
29
+ withNoopInstall
30
+ };
31
+ //# sourceMappingURL=install.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.mjs","sources":["../../../../src/vue/install.ts"],"sourcesContent":["import type { App, Directive, Plugin } from \"vue\";\n\nexport type TSXWithInstall<T> = T & Plugin;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst NOOP = (): void => {};\n\nexport const withInstall = <T, E extends Record<string, any>>(main: T, extra?: E): TSXWithInstall<T> & E => {\n\t(main as TSXWithInstall<T>).install = (app): void => {\n\t\tfor (const comp of [main, ...Object.values(extra ?? {})]) {\n\t\t\tapp.component(comp.name, comp);\n\t\t}\n\t};\n\n\tif (extra) {\n\t\tfor (const [key, comp] of Object.entries(extra)) {\n\t\t\t(main as any)[key] = comp;\n\t\t}\n\t}\n\treturn main as TSXWithInstall<T> & E;\n};\n\nexport const withNoopInstall = <T>(component: T): TSXWithInstall<T> => {\n\t(component as TSXWithInstall<T>).install = NOOP;\n\n\treturn component as TSXWithInstall<T>;\n};\n\nexport const withInstallDirective = <T extends Directive>(directive: T, name: string): TSXWithInstall<T> => {\n\t(directive as TSXWithInstall<T>).install = (app: App): void => {\n\t\tapp.directive(name, directive);\n\t};\n\n\treturn directive as TSXWithInstall<T>;\n};\n"],"names":[],"mappings":"AAKA,MAAM,OAAO,MAAY;AAAC;AAEb,MAAA,cAAc,CAAmC,MAAS,UAAqC;AAC1G,OAA2B,UAAU,CAAC,QAAc;AACzC,eAAA,QAAQ,CAAC,MAAM,GAAG,OAAO,OAAO,SAAS,CAAE,CAAA,CAAC,GAAG;AACrD,UAAA,UAAU,KAAK,MAAM,IAAI;AAAA,IAAA;AAAA,EAE/B;AAEA,MAAI,OAAO;AACV,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC/C,WAAa,GAAG,IAAI;AAAA,IAAA;AAAA,EACtB;AAEM,SAAA;AACR;AAEa,MAAA,kBAAkB,CAAI,cAAoC;AACrE,YAAgC,UAAU;AAEpC,SAAA;AACR;AAEa,MAAA,uBAAuB,CAAsB,WAAc,SAAoC;AAC1G,YAAgC,UAAU,CAAC,QAAmB;AAC1D,QAAA,UAAU,MAAM,SAAS;AAAA,EAC9B;AAEO,SAAA;AACR;"}
@@ -0,0 +1,9 @@
1
+ import { ComputedRef, PropType } from 'vue';
2
+ export declare const definePropType: <T>(val: any) => PropType<T>;
3
+ /**
4
+ * 构建 props
5
+ * @param props props
6
+ * @param rawProps 原生 props
7
+ * @param ignoreRawProps 忽略 原生 props 的 key
8
+ */
9
+ export declare const useProps: <T extends Record<string, unknown>, RT extends Record<string, unknown>>(props: T, rawProps?: RT, ignoreRawProps?: (keyof RT)[]) => ComputedRef<Record<string, unknown>>;
@@ -0,0 +1,15 @@
1
+ import { computed } from "vue";
2
+ import { omit, pick } from "lodash-unified";
3
+ const definePropType = (val) => val;
4
+ const useProps = (props, rawProps, ignoreRawProps) => {
5
+ if (!props) return computed(() => ({}));
6
+ return computed(() => {
7
+ const omittedRawProps = rawProps ? omit(rawProps, ignoreRawProps ?? []) : {};
8
+ return pick(props, Object.keys(omittedRawProps));
9
+ });
10
+ };
11
+ export {
12
+ definePropType,
13
+ useProps
14
+ };
15
+ //# sourceMappingURL=props.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.mjs","sources":["../../../../src/vue/props.ts"],"sourcesContent":["import type { ComputedRef, PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport { omit, pick } from \"lodash-unified\";\n\nexport const definePropType = <T>(val: any): PropType<T> => val;\n\n/**\n * 构建 props\n * @param props props\n * @param rawProps 原生 props\n * @param ignoreRawProps 忽略 原生 props 的 key\n */\nexport const useProps = <T extends Record<string, unknown>, RT extends Record<string, unknown>>(\n\tprops: T,\n\trawProps?: RT,\n\tignoreRawProps?: (keyof RT)[]\n): ComputedRef<Record<string, unknown>> => {\n\tif (!props) return computed(() => ({}));\n\n\treturn computed<Record<string, unknown>>(() => {\n\t\tconst omittedRawProps = rawProps ? omit(rawProps, ignoreRawProps ?? []) : {};\n\t\treturn pick(props, Object.keys(omittedRawProps)) as Record<string, unknown>;\n\t});\n};\n"],"names":[],"mappings":";;AAIa,MAAA,iBAAiB,CAAI,QAA0B;AAQrD,MAAM,WAAW,CACvB,OACA,UACA,mBAC0C;AAC1C,MAAI,CAAC,MAAO,QAAO,SAAS,OAAO,CAAG,EAAA;AAEtC,SAAO,SAAkC,MAAM;AACxC,UAAA,kBAAkB,WAAW,KAAK,UAAU,kBAAkB,CAAE,CAAA,IAAI,CAAC;AAC3E,WAAO,KAAK,OAAO,OAAO,KAAK,eAAe,CAAC;AAAA,EAAA,CAC/C;AACF;"}
@@ -0,0 +1,11 @@
1
+ import { SlotsType, VNode } from 'vue';
2
+ type RawSlots = Record<string, unknown>;
3
+ type VueSlots<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[];
4
+ type MakeSlots<T extends RawSlots> = {
5
+ [K in keyof T]: VueSlots<T[K]>;
6
+ };
7
+ /**
8
+ * 构建 slots
9
+ */
10
+ export declare const makeSlots: <Slots extends RawSlots>() => SlotsType<Partial<MakeSlots<Slots>>>;
11
+ export {};
@@ -0,0 +1,7 @@
1
+ const makeSlots = () => {
2
+ return Object;
3
+ };
4
+ export {
5
+ makeSlots
6
+ };
7
+ //# sourceMappingURL=slots.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.mjs","sources":["../../../../src/vue/slots.ts"],"sourcesContent":["import type { SlotsType, VNode } from \"vue\";\n\ntype RawSlots = Record<string, unknown>;\n\ntype VueSlots<T> = [T] extends [never] ? () => VNode[] : (arg: T) => VNode[];\n\ntype MakeSlots<T extends RawSlots> = {\n\t[K in keyof T]: VueSlots<T[K]>;\n};\n\n/**\n * 构建 slots\n */\nexport const makeSlots = <Slots extends RawSlots>(): SlotsType<Partial<MakeSlots<Slots>>> => {\n\treturn Object as SlotsType<Partial<MakeSlots<Slots>>>;\n};\n"],"names":[],"mappings":"AAaO,MAAM,YAAY,MAAoE;AACrF,SAAA;AACR;"}