@lemon30_npm/csit-vue3 1.0.44 → 1.0.45

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.
@@ -1,33 +1,33 @@
1
1
  import { ElUpload as se, ElButton as le, ElLink as ae, ElDivider as ne, ElTooltip as ie } from "element-plus/es";
2
- import { defineComponent as re, mergeDefaults as de, useSlots as ue, ref as L, watch as ce, createElementBlock as l, openBlock as s, createBlock as _, createCommentVNode as n, mergeProps as pe, unref as y, createSlots as me, withCtx as c, renderSlot as C, Fragment as m, createElementVNode as a, toDisplayString as v, renderList as R, normalizeProps as fe, guardReactiveProps as ge, normalizeClass as S, createVNode as h, createTextVNode as B, normalizeStyle as D, nextTick as $ } from "vue";
2
+ import { defineComponent as re, mergeDefaults as de, useSlots as ue, ref as D, watch as ce, createElementBlock as l, openBlock as s, createBlock as C, createCommentVNode as n, mergeProps as pe, unref as y, createSlots as me, withCtx as c, renderSlot as _, Fragment as m, createElementVNode as a, toDisplayString as v, renderList as N, normalizeProps as fe, guardReactiveProps as ge, normalizeClass as S, createVNode as h, createTextVNode as B, normalizeStyle as R, nextTick as L } from "vue";
3
3
  import I from "./icons/icon-upload-btn.svg.js";
4
4
  import T from "./icons/icon-upload-btn-hover.svg.js";
5
5
  import K from "./icons/icon-upload-btn-disabled.svg.js";
6
6
  import ye from "./icons/icon-loading-blue.svg.js";
7
7
  import ve from "./icons/icon-upload-success.svg.js";
8
- import ke from "./icons/icon-upload-retry.svg.js";
9
- import we from "./icons/icon-upload-fail.svg.js";
10
- import { ElMessageBox as he, ElMessage as E } from "element-plus";
8
+ import we from "./icons/icon-upload-retry.svg.js";
9
+ import ke from "./icons/icon-upload-fail.svg.js";
10
+ import { ElMessageBox as he, ElMessage as $ } from "element-plus";
11
11
  import { useUpload as be } from "./hooks/useUpload.js";
12
12
  import { useUploadRetry as Be } from "./hooks/useUploadRetry.js";
13
- import { downloadFileWithAxios as _e } from "./utils/file.js";
14
- import { getFileIconByName as Ce } from "./utils/file-icon-maps.js";
13
+ import { downloadFileWithAxios as Ce } from "./utils/file.js";
14
+ import { getFileIconByName as _e } from "./utils/file-icon-maps.js";
15
15
  import { useExposeMethods as Se } from "./expose/index.js";
16
16
  import { useCiUploadComputed as ze } from "./computed/index.js";
17
- import { defaultProps as Le } from "./props/index.js";
18
- const $e = { class: "CiUpload" }, Ee = {
17
+ import { defaultProps as De } from "./props/index.js";
18
+ const Le = { class: "CiUpload" }, $e = {
19
19
  key: 0,
20
20
  class: "tip-slot-textInfo"
21
- }, Ue = {
21
+ }, Ee = {
22
22
  key: 1,
23
23
  class: "default-tip-slot-textInfo"
24
- }, Ne = { class: "upload-btn-text" }, Pe = {
24
+ }, Pe = { class: "upload-btn-text" }, Ue = {
25
25
  key: 0,
26
26
  class: "tip-slot-textInfo"
27
- }, Re = {
27
+ }, Ne = {
28
28
  key: 1,
29
29
  class: "default-tip-slot-textInfo"
30
- }, De = { class: "file-item-top" }, Ie = { class: "file-name-file-icon" }, Te = ["src"], Ke = { class: "top-right" }, Me = {
30
+ }, Re = { class: "file-item-top" }, Ie = { class: "file-name-file-icon" }, Te = ["src"], Ke = { class: "top-right" }, Me = {
31
31
  key: 0,
32
32
  class: "file-size"
33
33
  }, Ve = {
@@ -46,6 +46,8 @@ const $e = { class: "CiUpload" }, Ee = {
46
46
  props: /* @__PURE__ */ de({
47
47
  action: {},
48
48
  downloadUrl: {},
49
+ data: {},
50
+ headers: {},
49
51
  uploadBtnText: {},
50
52
  maxSize: {},
51
53
  multiple: { type: Boolean },
@@ -60,30 +62,35 @@ const $e = { class: "CiUpload" }, Ee = {
60
62
  showPreviewBtn: { type: Boolean },
61
63
  showDownloadBtn: { type: Boolean },
62
64
  showDeleteBtn: { type: Boolean },
65
+ customDownload: { type: Boolean },
63
66
  drag: { type: Boolean },
64
67
  disabled: { type: Boolean },
65
68
  readonly: { type: Boolean },
66
69
  axiosInstance: {}
67
- }, Le),
68
- emits: ["update:fileList", "onSuccess", "onRemove", "onChange", "onError"],
70
+ }, De),
71
+ emits: ["update:fileList", "onSuccess", "onRemove", "onChange", "onError", "onCustomDownload"],
69
72
  setup(M, { expose: V, emit: q }) {
70
- const A = ue(), U = L(), b = L(!1), k = L([]), { checkUploadStatus: H } = Se(k), r = M, { customHttpRequest: W } = be(r.axiosInstance), d = q;
73
+ const A = ue(), E = D(), b = D(!1), w = D([]), { checkUploadStatus: H } = Se(w), r = M, { customHttpRequest: W } = be(r.axiosInstance), d = q;
71
74
  V({
72
75
  checkUploadStatus: H
73
76
  });
74
- const { retryUpload: F } = Be(k, d, r);
77
+ const { retryUpload: F } = Be(w, d, r);
75
78
  ce(
76
79
  () => r.fileList,
77
80
  (e) => {
78
- k.value = e.map((t) => ({ ...t }));
81
+ w.value = e.map((t) => ({ ...t }));
79
82
  },
80
83
  { immediate: !0 }
81
84
  );
82
85
  const z = (e) => {
83
86
  var t;
84
- (t = U.value) == null || t.handleRemove(e);
85
- }, N = (e) => {
86
- e.downloadPercentage = 0, e.status = "downloading", _e(
87
+ (t = E.value) == null || t.handleRemove(e);
88
+ }, P = (e) => {
89
+ if (r.customDownload) {
90
+ d("onCustomDownload", e);
91
+ return;
92
+ }
93
+ e.downloadPercentage = 0, e.status = "downloading", Ce(
87
94
  {
88
95
  fileKey: e.fileKey || "当前此条数据没有fileKey字段",
89
96
  fileName: e.fileName || "当前此条数据没有fileName字段"
@@ -99,10 +106,10 @@ const $e = { class: "CiUpload" }, Ee = {
99
106
  );
100
107
  }, O = (e) => {
101
108
  const t = r.accept.split(",").map((i) => i.trim().toLowerCase()), u = e.type.toLowerCase(), f = e.name.toLowerCase();
102
- return t.some((i) => u === i || f.endsWith(i)) ? e.size <= r.maxSize ? !0 : (E.error(`文件大小超出限制,最大文件大小为${ee.value}`), b.value = !0, $(() => {
109
+ return t.some((i) => u === i || f.endsWith(i)) ? e.size <= r.maxSize ? !0 : ($.error(`文件大小超出限制,最大文件大小为${ee.value}`), b.value = !0, L(() => {
103
110
  const i = r.fileList.filter((o) => o.uid !== e.uid);
104
111
  d("update:fileList", i), b.value = !1;
105
- }), !1) : (E.error("不支持上传该类型文件"), b.value = !0, $(() => {
112
+ }), !1) : ($.error("不支持上传该类型文件"), b.value = !0, L(() => {
106
113
  const i = r.fileList.filter((o) => o.uid !== e.uid);
107
114
  d("update:fileList", i), b.value = !1;
108
115
  }), !1);
@@ -119,49 +126,51 @@ const $e = { class: "CiUpload" }, Ee = {
119
126
  // 用户点击“确定”按钮,允许删除
120
127
  () => !1
121
128
  // 用户点击“取消”按钮,取消删除
122
- ), x = (e, t) => {
123
- E.error(`文件数量超出限制,最大文件数量为${r.limit}个`);
124
- }, G = (e, t, u) => {
125
- t.status = "fail", t.percentage = 0, $(() => {
129
+ ), G = (e, t) => {
130
+ $.error(`文件数量超出限制,最大文件数量为${r.limit}个`);
131
+ }, J = (e, t, u) => {
132
+ t.status = "fail", t.percentage = 0, L(() => {
126
133
  d("update:fileList", [...u, t]), d("onError", t, u);
127
134
  });
128
- }, J = (e, t, u) => {
129
- var p, w, i;
135
+ }, Q = (e, t, u) => {
136
+ var p, k, i;
130
137
  if (!e) return;
131
138
  const f = u.find((o) => o.uid === t.uid);
132
- f && (f.fileName = ((p = e == null ? void 0 : e.data) == null ? void 0 : p.fileName) || t.name, f.fileKey = ((w = e == null ? void 0 : e.data) == null ? void 0 : w.fileKey) || "当前接口没有返回fileKey字段", f.fileSize = ((i = e == null ? void 0 : e.data) == null ? void 0 : i.fileSize) || t.size), d("update:fileList", u), d("onSuccess", t, u);
133
- }, Q = (e, t) => {
134
- e.status === "success" && !e.response || (d("update:fileList", t), d("onChange", e, t));
139
+ f && (f.fileName = ((p = e == null ? void 0 : e.data) == null ? void 0 : p.fileName) || t.name, f.fileKey = ((k = e == null ? void 0 : e.data) == null ? void 0 : k.fileKey) || "当前接口没有返回fileKey字段", f.fileSize = ((i = e == null ? void 0 : e.data) == null ? void 0 : i.fileSize) || t.size), d("update:fileList", u), d("onSuccess", t, u);
135
140
  }, X = (e, t) => {
141
+ e.status === "success" && !e.response || (d("update:fileList", t), d("onChange", e, t));
142
+ }, Y = (e, t) => {
136
143
  d("update:fileList", t), d("onRemove", e, t);
137
- }, { hasRealDefaultSlot: Y, finalBeforeUpload: Z, maxSizeInMB: ee, defaultTipSlotTextInfo: P, otherSlots: te } = ze(r, A, O);
144
+ }, { hasRealDefaultSlot: Z, finalBeforeUpload: x, maxSizeInMB: ee, defaultTipSlotTextInfo: U, otherSlots: te } = ze(r, A, O);
138
145
  return (e, t) => {
139
- const u = le, f = se, p = ae, w = ne, i = ie;
140
- return s(), l("div", $e, [
141
- e.readonly ? n("", !0) : (s(), _(f, pe({
146
+ const u = le, f = se, p = ae, k = ne, i = ie;
147
+ return s(), l("div", Le, [
148
+ e.readonly ? n("", !0) : (s(), C(f, pe({
142
149
  key: 0,
143
150
  class: ["ci-el-upload-component", { "is-disabled": e.disabled }],
144
151
  ref_key: "uploadRef",
145
- ref: U,
152
+ ref: E,
146
153
  action: e.action,
147
- "file-list": k.value,
154
+ data: e.data,
155
+ headers: e.headers,
156
+ "file-list": w.value,
148
157
  accept: e.accept,
149
158
  limit: e.limit,
150
159
  multiple: e.multiple,
151
160
  drag: e.drag,
152
161
  disabled: e.disabled,
153
- "before-upload": y(Z),
162
+ "before-upload": y(x),
154
163
  "before-remove": j,
155
- "on-success": J,
156
- "on-change": Q,
157
- "on-remove": X,
158
- "on-exceed": x,
159
- "on-error": G,
164
+ "on-success": Q,
165
+ "on-change": X,
166
+ "on-remove": Y,
167
+ "on-exceed": G,
168
+ "on-error": J,
160
169
  "http-request": y(W),
161
170
  "show-file-list": !1
162
171
  }, e.$attrs), me({
163
172
  default: c(() => [
164
- y(Y) ? C(e.$slots, "default", { key: 0 }, void 0, !0) : (s(), l(m, { key: 1 }, [
173
+ y(Z) ? _(e.$slots, "default", { key: 0 }, void 0, !0) : (s(), l(m, { key: 1 }, [
165
174
  e.drag ? (s(), l(m, { key: 0 }, [
166
175
  t[0] || (t[0] = a("img", {
167
176
  class: "upload-btn-icon",
@@ -182,10 +191,10 @@ const $e = { class: "CiUpload" }, Ee = {
182
191
  a("span", { class: "drag-text-info-click" }, "点击上传"),
183
192
  a("span", { class: "drag-text-info-black" }, "或将文件拖拽到这里上传")
184
193
  ], -1)),
185
- e.$slots.tip ? (s(), l("div", Ee, [
186
- C(e.$slots, "tip", {}, void 0, !0)
187
- ])) : (s(), l("div", Ue, v(y(P)), 1))
188
- ], 64)) : (s(), _(u, {
194
+ e.$slots.tip ? (s(), l("div", $e, [
195
+ _(e.$slots, "tip", {}, void 0, !0)
196
+ ])) : (s(), l("div", Ee, v(y(U)), 1))
197
+ ], 64)) : (s(), C(u, {
189
198
  key: 1,
190
199
  class: "upload-btn",
191
200
  disabled: e.disabled
@@ -206,7 +215,7 @@ const $e = { class: "CiUpload" }, Ee = {
206
215
  src: K,
207
216
  alt: ""
208
217
  }, null, -1)),
209
- a("span", Ne, v(e.uploadBtnText), 1)
218
+ a("span", Pe, v(e.uploadBtnText), 1)
210
219
  ]),
211
220
  _: 1,
212
221
  __: [4, 5, 6]
@@ -218,38 +227,38 @@ const $e = { class: "CiUpload" }, Ee = {
218
227
  e.drag ? void 0 : {
219
228
  name: "tip",
220
229
  fn: c(() => [
221
- e.$slots.tip ? (s(), l("div", Pe, [
222
- C(e.$slots, "tip", {}, void 0, !0)
223
- ])) : (s(), l("div", Re, v(y(P)), 1))
230
+ e.$slots.tip ? (s(), l("div", Ue, [
231
+ _(e.$slots, "tip", {}, void 0, !0)
232
+ ])) : (s(), l("div", Ne, v(y(U)), 1))
224
233
  ]),
225
234
  key: "0"
226
235
  },
227
- R(y(te), (o, g) => ({
236
+ N(y(te), (o, g) => ({
228
237
  name: g,
229
238
  fn: c((oe) => [
230
- C(e.$slots, g, fe(ge(oe || {})), void 0, !0)
239
+ _(e.$slots, g, fe(ge(oe || {})), void 0, !0)
231
240
  ])
232
241
  }))
233
- ]), 1040, ["class", "action", "file-list", "accept", "limit", "multiple", "drag", "disabled", "before-upload", "http-request"])),
234
- k.value.length ? (s(), l("div", {
242
+ ]), 1040, ["class", "action", "data", "headers", "file-list", "accept", "limit", "multiple", "drag", "disabled", "before-upload", "http-request"])),
243
+ w.value.length ? (s(), l("div", {
235
244
  key: 1,
236
245
  class: S(["custom-file-list-default", { "is-readonly": e.readonly }])
237
246
  }, [
238
- (s(!0), l(m, null, R(k.value, (o) => (s(), l("div", {
247
+ (s(!0), l(m, null, N(w.value, (o) => (s(), l("div", {
239
248
  class: "file-item-wrapper",
240
249
  key: o.uid
241
250
  }, [
242
- a("div", De, [
251
+ a("div", Re, [
243
252
  a("div", Ie, [
244
253
  e.showFileExtIcon ? (s(), l("img", {
245
254
  key: 0,
246
255
  class: "file-icon",
247
- src: y(Ce)(o.fileName || o.name)
256
+ src: y(_e)(o.fileName || o.name)
248
257
  }, null, 8, Te)) : n("", !0),
249
258
  h(p, {
250
259
  class: "top-left file-name",
251
260
  disabled: o.status === "downloading" || o.status === "uploading",
252
- onClick: (g) => N(o)
261
+ onClick: (g) => P(o)
253
262
  }, {
254
263
  default: c(() => [
255
264
  B(v(o.fileName || o.name), 1)
@@ -271,24 +280,24 @@ const $e = { class: "CiUpload" }, Ee = {
271
280
  _: 2,
272
281
  __: [7]
273
282
  }, 1032, ["onClick"]),
274
- h(w, { direction: "vertical" })
283
+ h(k, { direction: "vertical" })
275
284
  ], 64)) : n("", !0),
276
285
  e.showDownloadBtn ? (s(), l(m, { key: 1 }, [
277
286
  h(p, {
278
287
  disabled: o.status === "downloading",
279
- onClick: (g) => N(o)
288
+ onClick: (g) => P(o)
280
289
  }, {
281
290
  default: c(() => [
282
- B(v(o.status === "downloading" ? `下载中...${o.downloadPercentage || 0}%` : "下载"), 1)
291
+ B(v(o.status === "downloading" && e.showDownloadProgress && e.customDownload ? `下载中...${o.downloadPercentage || 0}%` : "下载"), 1)
283
292
  ]),
284
293
  _: 2
285
294
  }, 1032, ["disabled", "onClick"]),
286
- e.showDeleteBtn && !e.readonly ? (s(), _(w, {
295
+ e.showDeleteBtn && !e.readonly ? (s(), C(k, {
287
296
  key: 0,
288
297
  direction: "vertical"
289
298
  })) : n("", !0)
290
299
  ], 64)) : n("", !0),
291
- e.showDeleteBtn && !e.readonly ? (s(), _(p, {
300
+ e.showDeleteBtn && !e.readonly ? (s(), C(p, {
292
301
  key: 2,
293
302
  onClick: (g) => z(o)
294
303
  }, {
@@ -343,7 +352,7 @@ const $e = { class: "CiUpload" }, Ee = {
343
352
  default: c(() => [
344
353
  a("img", {
345
354
  class: "retry-icon",
346
- src: ke,
355
+ src: we,
347
356
  onClick: (g) => y(F)(o)
348
357
  }, null, 8, He)
349
358
  ]),
@@ -351,7 +360,7 @@ const $e = { class: "CiUpload" }, Ee = {
351
360
  }, 1024),
352
361
  t[12] || (t[12] = a("img", {
353
362
  class: "fail-icon",
354
- src: we
363
+ src: ke
355
364
  }, null, -1))
356
365
  ], 2)) : n("", !0)
357
366
  ])
@@ -361,7 +370,7 @@ const $e = { class: "CiUpload" }, Ee = {
361
370
  o.status === "uploading" ? (s(), l("div", We, [
362
371
  a("div", {
363
372
  class: "file-progress-inner",
364
- style: D({ width: (o.percentage || 0) + "%" })
373
+ style: R({ width: (o.percentage || 0) + "%" })
365
374
  }, null, 4)
366
375
  ])) : n("", !0)
367
376
  ], 64)) : n("", !0),
@@ -369,7 +378,7 @@ const $e = { class: "CiUpload" }, Ee = {
369
378
  o.status === "downloading" ? (s(), l("div", Fe, [
370
379
  a("div", {
371
380
  class: "file-progress-inner",
372
- style: D({ width: (o.downloadPercentage || 0) + "%" })
381
+ style: R({ width: (o.downloadPercentage || 0) + "%" })
373
382
  }, null, 4)
374
383
  ])) : n("", !0)
375
384
  ], 64)) : n("", !0)
@@ -3,6 +3,10 @@ const o = {
3
3
  action: "http://localhost:3001/upload",
4
4
  // 下载 URL - 默认值: 是我本机本地跑一个 Node 服务, 提供了一个下载接口
5
5
  downloadUrl: "http://localhost:3001/download-by-key",
6
+ // 上传时附带的额外参数 - 默认值: {}
7
+ data: () => ({}),
8
+ // 设置上传的请求头部 - 默认值: {}
9
+ headers: () => ({}),
6
10
  // 上传按钮文本 - 默认值: 选择附件
7
11
  uploadBtnText: "选择附件",
8
12
  // 限制上传文件的大小(单位: byte) - 默认值: 100.00MB
@@ -30,6 +34,8 @@ const o = {
30
34
  showDownloadBtn: !0,
31
35
  // 是否显示删除按钮 - 默认值: true
32
36
  showDeleteBtn: !0,
37
+ // 是否由开发者自定义下载逻辑 - 默认值: false
38
+ customDownload: !1,
33
39
  // 是否支持拖拽上传 - 默认值: false
34
40
  drag: !1,
35
41
  // 是否禁用上传 - 默认值: false
@@ -0,0 +1,9 @@
1
+ function c(p, e) {
2
+ !e || typeof e != "object" || Object.keys(e).forEach((n) => {
3
+ const o = e[n];
4
+ o instanceof Blob ? p.append(n, o) : p.append(n, String(o));
5
+ });
6
+ }
7
+ export {
8
+ c as appendFormData
9
+ };
@@ -15,14 +15,18 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Ci
15
15
  onRemove: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
16
16
  onSuccess: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
17
17
  "update:fileList": (list: CiUploadUserFile[]) => any;
18
+ onCustomDownload: (file: UploadUserFile) => any;
18
19
  }, string, import('vue').PublicProps, Readonly<CiUploadProps> & Readonly<{
19
20
  onOnChange?: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
20
21
  onOnError?: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
21
22
  onOnRemove?: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
22
23
  onOnSuccess?: (file: CiUploadFile, fileList: CiUploadUserFile[]) => any;
23
24
  "onUpdate:fileList"?: (list: CiUploadUserFile[]) => any;
25
+ onOnCustomDownload?: (file: UploadUserFile) => any;
24
26
  }>, {
25
27
  drag: boolean;
28
+ data: Record<string, any>;
29
+ headers: Headers | Record<string, any>;
26
30
  multiple: boolean;
27
31
  action: string;
28
32
  accept: string;
@@ -39,6 +43,7 @@ declare const _default: __VLS_WithTemplateSlots<import('vue').DefineComponent<Ci
39
43
  showPreviewBtn: boolean;
40
44
  showDownloadBtn: boolean;
41
45
  showDeleteBtn: boolean;
46
+ customDownload: boolean;
42
47
  readonly: boolean;
43
48
  axiosInstance: any;
44
49
  }, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {
@@ -2,6 +2,8 @@ import { UploadUserFile } from 'element-plus';
2
2
  export declare const defaultProps: {
3
3
  action: string;
4
4
  downloadUrl: string;
5
+ data: () => Record<string, any>;
6
+ headers: () => Headers | Record<string, any>;
5
7
  uploadBtnText: string;
6
8
  maxSize: number;
7
9
  multiple: boolean;
@@ -15,6 +17,7 @@ export declare const defaultProps: {
15
17
  showPreviewBtn: boolean;
16
18
  showDownloadBtn: boolean;
17
19
  showDeleteBtn: boolean;
20
+ customDownload: boolean;
18
21
  drag: boolean;
19
22
  disabled: boolean;
20
23
  readonly: boolean;
@@ -2,6 +2,8 @@ import { UploadFile, UploadProps, UploadUserFile } from 'element-plus';
2
2
  export interface CiUploadProps {
3
3
  action?: string;
4
4
  downloadUrl?: string;
5
+ data?: Record<string, any>;
6
+ headers?: Headers | Record<string, any>;
5
7
  uploadBtnText?: string;
6
8
  maxSize?: number;
7
9
  multiple?: boolean;
@@ -16,6 +18,7 @@ export interface CiUploadProps {
16
18
  showPreviewBtn?: boolean;
17
19
  showDownloadBtn?: boolean;
18
20
  showDeleteBtn?: boolean;
21
+ customDownload?: boolean;
19
22
  drag?: boolean;
20
23
  disabled?: boolean;
21
24
  readonly?: boolean;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 将一个普通对象的数据追加到 FormData 中
3
+ * - 支持 string/number 自动转 string
4
+ * - 支持 Blob 直接追加
5
+ */
6
+ export declare function appendFormData(formData: FormData, data: Record<string, any>): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lemon30_npm/csit-vue3",
3
- "version": "1.0.44",
3
+ "version": "1.0.45",
4
4
  "type": "module",
5
5
  "author": "cuiwq",
6
6
  "license": "MIT",