@qxs-bns/utils 0.0.14 → 0.0.16

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/es/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './src/argo-log';
2
+ export * from './src/date-transfer';
2
3
  export * from './src/device';
3
4
  export * from './src/file-operations';
4
5
  export * from './src/json';
package/es/index.mjs CHANGED
@@ -1,33 +1,35 @@
1
1
  import { ArgoLog as r } from "./src/argo-log.mjs";
2
- import { isMobile as t } from "./src/device.mjs";
3
- import { createVideoUploader as m, downloadFile as p } from "./src/file-operations.mjs";
4
- import { JsonToExcel as a, excelToJson as n } from "./src/json.mjs";
5
- import { OssError as d, OssUploader as f, generateSignedUrl as g, uploadFile as c } from "./src/oss-uploader.mjs";
6
- import { Storage as O } from "./src/storage.mjs";
7
- import { isBoolean as b, isElement as w, isImageByMimeType as E, isJSONString as J, isNumber as T, isPlainObject as u, isUndefined as y, isWindow as A } from "./src/types.mjs";
8
- import { ApiService as F } from "./src/use-api.mjs";
9
- import { watermark as N } from "./src/watermark.mjs";
2
+ import { formatTime as t } from "./src/date-transfer.mjs";
3
+ import { isMobile as p } from "./src/device.mjs";
4
+ import { createVideoUploader as a, downloadFile as l } from "./src/file-operations.mjs";
5
+ import { JsonToExcel as n, excelToJson as x } from "./src/json.mjs";
6
+ import { OssError as g, OssUploader as c, generateSignedUrl as S, uploadFile as O } from "./src/oss-uploader.mjs";
7
+ import { Storage as U } from "./src/storage.mjs";
8
+ import { isBoolean as w, isElement as E, isImageByMimeType as J, isJSONString as u, isNumber as y, isPlainObject as A, isUndefined as B, isWindow as F } from "./src/types.mjs";
9
+ import { ApiService as N } from "./src/use-api.mjs";
10
+ import { watermark as k } from "./src/watermark.mjs";
10
11
  export {
11
- F as ApiService,
12
+ N as ApiService,
12
13
  r as ArgoLog,
13
- a as JsonToExcel,
14
- d as OssError,
15
- f as OssUploader,
16
- O as Storage,
17
- m as createVideoUploader,
18
- p as downloadFile,
19
- n as excelToJson,
20
- g as generateSignedUrl,
21
- b as isBoolean,
22
- w as isElement,
23
- E as isImageByMimeType,
24
- J as isJSONString,
25
- t as isMobile,
26
- T as isNumber,
27
- u as isPlainObject,
28
- y as isUndefined,
29
- A as isWindow,
30
- c as uploadFile,
31
- N as watermark
14
+ n as JsonToExcel,
15
+ g as OssError,
16
+ c as OssUploader,
17
+ U as Storage,
18
+ a as createVideoUploader,
19
+ l as downloadFile,
20
+ x as excelToJson,
21
+ t as formatTime,
22
+ S as generateSignedUrl,
23
+ w as isBoolean,
24
+ E as isElement,
25
+ J as isImageByMimeType,
26
+ u as isJSONString,
27
+ p as isMobile,
28
+ y as isNumber,
29
+ A as isPlainObject,
30
+ B as isUndefined,
31
+ F as isWindow,
32
+ O as uploadFile,
33
+ k as watermark
32
34
  };
33
35
  //# sourceMappingURL=index.mjs.map
package/es/index.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 统一的时间转换函数
3
+ * @param {number|string|Date} time - 输入时间(时间戳、日期字符串或Date对象)
4
+ * @param {object} options - 配置选项
5
+ * @param {boolean} options.isMs - 输入是否为毫秒,默认false(秒)
6
+ * @param {string} options.format - 输出格式:'duration'(持续时间)| 'relative'(相对时间),默认'duration'
7
+ * @param {string} options.separator - 时间分隔符,默认':'
8
+ * @param {boolean} options.complete - 是否显示完整时间格式,默认false
9
+ * @param {boolean} options.showDate - 是否显示日期部分,默认true
10
+ * @param {boolean} options.showTime - 是否显示时间部分,默认true
11
+ * @returns {string} 格式化后的时间字符串
12
+ */
13
+ export declare function formatTime(time: number | string | Date, { isMs, format, separator, complete, showDate, showTime, }?: {
14
+ isMs?: boolean | undefined;
15
+ format?: string | undefined;
16
+ separator?: string | undefined;
17
+ complete?: boolean | undefined;
18
+ showDate?: boolean | undefined;
19
+ showTime?: boolean | undefined;
20
+ }): string;
@@ -0,0 +1,62 @@
1
+ const c = {
2
+ thresholds: {
3
+ second: 1e3,
4
+ minute: 6e4,
5
+ hour: 36e5,
6
+ day: 864e5,
7
+ month: 2592e6,
8
+ year: 31536e6
9
+ },
10
+ units: {
11
+ year: 31536e6,
12
+ month: 2592e6,
13
+ day: 864e5,
14
+ hour: 36e5,
15
+ minute: 6e4,
16
+ second: 1e3
17
+ },
18
+ labels: {
19
+ relative: {
20
+ justNow: "刚刚",
21
+ seconds: "几秒前",
22
+ minutes: "分钟前",
23
+ hours: "小时前",
24
+ days: "天前",
25
+ months: "个月前",
26
+ years: "年前"
27
+ }
28
+ }
29
+ };
30
+ function b(u, {
31
+ isMs: m = !1,
32
+ format: $ = "duration",
33
+ separator: d = ":",
34
+ complete: y = !1,
35
+ showDate: M = !0,
36
+ showTime: w = !0
37
+ } = {}) {
38
+ let e;
39
+ if (typeof u == "number")
40
+ e = m ? u : u * 1e3;
41
+ else {
42
+ const r = Date.now(), t = new Date(u).getTime();
43
+ e = $ === "relative" ? r - t : t;
44
+ }
45
+ if (Number.isNaN(e) || e < 0)
46
+ throw new Error("无效的时间输入");
47
+ if ($ === "relative") {
48
+ const { justNow: r, seconds: t, minutes: f, hours: N, days: p, months: S, years: T } = c.labels.relative, o = c.thresholds;
49
+ return e < o.second ? r : e < o.minute ? t : e < o.hour ? `${Math.floor(e / o.minute)}${f}` : e < o.day ? `${Math.floor(e / o.hour)}${N}` : e < o.month ? `${Math.floor(e / o.day)}${p}` : e < o.year ? `${Math.floor(e / o.month)}${S}` : `${Math.floor(e / o.year)}${T}`;
50
+ }
51
+ const h = [], i = Math.floor(e / 1e3), l = Math.floor(i / (24 * 3600)), a = Math.floor(i % (24 * 3600) / 3600), s = Math.floor(i % 3600 / 60), n = i % 60;
52
+ if (M && l > 0 && h.push(`${l}天`), w) {
53
+ const r = (f) => String(f).padStart(2, "0");
54
+ let t = "";
55
+ y ? t = `${r(a)}${d}${r(s)}${d}${r(n)}` : l > 0 ? (t = a > 0 ? `${a}小时` : "", t += s > 0 ? `${s}分钟` : "") : a > 0 ? (t = `${a}小时`, t += s > 0 ? `${s}分钟` : "", t += n > 0 ? `${n}秒` : "") : s > 0 ? (t = `${s}分钟`, t += n > 0 ? `${n}秒` : "") : t = `${n}秒`, t && h.push(t);
56
+ }
57
+ return h.join(" ");
58
+ }
59
+ export {
60
+ b as formatTime
61
+ };
62
+ //# sourceMappingURL=date-transfer.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-transfer.mjs","sources":["../../../../packages/utils/src/date-transfer.ts"],"sourcesContent":["// 将阈值和时间单位合并为一个常量对象\nconst TIME_CONSTANTS = {\n thresholds: {\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 86400000,\n month: 2592000000,\n year: 31536000000,\n },\n units: {\n year: 31536000000,\n month: 2592000000,\n day: 86400000,\n hour: 3600000,\n minute: 60000,\n second: 1000,\n },\n labels: {\n relative: {\n justNow: '刚刚',\n seconds: '几秒前',\n minutes: '分钟前',\n hours: '小时前',\n days: '天前',\n months: '个月前',\n years: '年前',\n },\n },\n}\n\n/**\n * 统一的时间转换函数\n * @param {number|string|Date} time - 输入时间(时间戳、日期字符串或Date对象)\n * @param {object} options - 配置选项\n * @param {boolean} options.isMs - 输入是否为毫秒,默认false(秒)\n * @param {string} options.format - 输出格式:'duration'(持续时间)| 'relative'(相对时间),默认'duration'\n * @param {string} options.separator - 时间分隔符,默认':'\n * @param {boolean} options.complete - 是否显示完整时间格式,默认false\n * @param {boolean} options.showDate - 是否显示日期部分,默认true\n * @param {boolean} options.showTime - 是否显示时间部分,默认true\n * @returns {string} 格式化后的时间字符串\n */\nexport function formatTime(\n time: number | string | Date,\n {\n isMs = false,\n format = 'duration',\n separator = ':',\n complete = false,\n showDate = true,\n showTime = true,\n } = {},\n) {\n // 处理输入时间\n let ms: number\n\n if (typeof time === 'number') {\n ms = isMs ? time : time * 1000\n }\n else {\n const now = Date.now()\n const timestamp = new Date(time).getTime()\n ms = format === 'relative' ? now - timestamp : timestamp\n }\n\n // 验证输入\n if (Number.isNaN(ms) || ms < 0) {\n throw new Error('无效的时间输入')\n }\n\n // 相对时间格式\n if (format === 'relative') {\n const { justNow, seconds, minutes, hours, days, months, years }\n = TIME_CONSTANTS.labels.relative\n const thresholds = TIME_CONSTANTS.thresholds\n\n if (ms < thresholds.second) {\n return justNow\n }\n if (ms < thresholds.minute) {\n return seconds\n }\n if (ms < thresholds.hour) {\n return `${Math.floor(ms / thresholds.minute)}${minutes}`\n }\n if (ms < thresholds.day) {\n return `${Math.floor(ms / thresholds.hour)}${hours}`\n }\n if (ms < thresholds.month) {\n return `${Math.floor(ms / thresholds.day)}${days}`\n }\n if (ms < thresholds.year) {\n return `${Math.floor(ms / thresholds.month)}${months}`\n }\n return `${Math.floor(ms / thresholds.year)}${years}`\n }\n\n // 持续时间格式\n const result = []\n const totalSeconds = Math.floor(ms / 1000)\n const days = Math.floor(totalSeconds / (24 * 3600))\n const hours = Math.floor((totalSeconds % (24 * 3600)) / 3600)\n const minutes = Math.floor((totalSeconds % 3600) / 60)\n const seconds = totalSeconds % 60\n\n // 处理日期部分\n if (showDate && days > 0) {\n result.push(`${days}天`)\n }\n\n // 处理时间部分\n if (showTime) {\n const pad = (num: number): string => String(num).padStart(2, '0')\n let timeStr = ''\n\n if (complete) {\n timeStr = `${pad(hours)}${separator}${pad(minutes)}${separator}${pad(seconds)}`\n }\n else {\n if (days > 0) {\n timeStr = hours > 0 ? `${hours}小时` : ''\n timeStr += minutes > 0 ? `${minutes}分钟` : ''\n }\n else if (hours > 0) {\n timeStr = `${hours}小时`\n timeStr += minutes > 0 ? `${minutes}分钟` : ''\n timeStr += seconds > 0 ? `${seconds}秒` : ''\n }\n else if (minutes > 0) {\n timeStr = `${minutes}分钟`\n timeStr += seconds > 0 ? `${seconds}秒` : ''\n }\n else {\n timeStr = `${seconds}秒`\n }\n }\n if (timeStr) {\n result.push(timeStr)\n }\n }\n\n return result.join(' ')\n}\n"],"names":["TIME_CONSTANTS","formatTime","time","isMs","format","separator","complete","showDate","showTime","ms","now","timestamp","justNow","seconds","minutes","hours","days","months","years","thresholds","result","totalSeconds","pad","num","timeStr"],"mappings":"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"}
@@ -1,13 +1,13 @@
1
- var u = Object.defineProperty;
2
- var g = (r, e, t) => e in r ? u(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var a = (r, e, t) => g(r, typeof e != "symbol" ? e + "" : e, t);
4
- import y from "../_virtual/aliyun-oss-sdk.mjs";
1
+ var g = Object.defineProperty;
2
+ var y = (r, e, t) => e in r ? g(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
+ var a = (r, e, t) => y(r, typeof e != "symbol" ? e + "" : e, t);
4
+ import w from "../_virtual/aliyun-oss-sdk.mjs";
5
5
  class o extends Error {
6
6
  constructor(e) {
7
7
  super(e), this.name = "OssError";
8
8
  }
9
9
  }
10
- const h = {
10
+ const d = {
11
11
  accessKeyId: "",
12
12
  accessKeySecret: "",
13
13
  stsToken: "",
@@ -37,40 +37,40 @@ class n {
37
37
  }
38
38
  // 修改初始化方法
39
39
  static async initOssClient(e, t) {
40
- const c = Date.now() - this.createTokenTime;
41
- if (!h.accessKeyId || c > this.expireTime)
40
+ const i = Date.now() - this.createTokenTime;
41
+ if (!d.accessKeyId || i > this.expireTime)
42
42
  try {
43
- const { accessKeyId: s, accessKeySecret: l, securityToken: i } = await this.getOssCredentials(e);
44
- Object.assign(h, {
43
+ const { accessKeyId: s, accessKeySecret: l, securityToken: h } = await this.getOssCredentials(e);
44
+ Object.assign(d, {
45
45
  accessKeyId: s,
46
46
  accessKeySecret: l,
47
- stsToken: i,
47
+ stsToken: h,
48
48
  ...t,
49
49
  refreshSTSToken: async () => await this.getOssCredentials(e),
50
50
  refreshSTSTokenInterval: 3e5
51
- }), this.createTokenTime = Date.now(), this.client = new y(h);
51
+ }), this.createTokenTime = Date.now(), this.client = new w(d);
52
52
  } catch (s) {
53
53
  throw new o(s instanceof Error ? s.message : String(s));
54
54
  }
55
55
  }
56
56
  // 修改上传方法
57
57
  static async uploadFile(e) {
58
- const { file: t, onProgress: c = () => {
59
- }, path: s = "ksh/pdf", getCredentials: l } = e;
60
- await this.initOssClient(l);
58
+ const { file: t, onProgress: i = () => {
59
+ }, path: s = "ksh/pdf", getCredentials: l, ...h } = e;
60
+ await this.initOssClient(l, h);
61
61
  try {
62
62
  return await this.client.multipartUpload(`${s}/${t.name}`, t, {
63
- progress(d) {
64
- c({ percent: Math.round(d * 100) });
63
+ progress(u) {
64
+ i({ percent: Math.round(u * 100) });
65
65
  }
66
66
  });
67
- } catch (i) {
68
- throw new o(i instanceof Error ? i.message : String(i));
67
+ } catch (c) {
68
+ throw new o(c instanceof Error ? c.message : String(c));
69
69
  }
70
70
  }
71
71
  // 修改生成签名URL方法
72
- static async generateSignedUrl(e, t, c) {
73
- await this.initOssClient(t, c);
72
+ static async generateSignedUrl(e, t, i) {
73
+ await this.initOssClient(t, i);
74
74
  try {
75
75
  return await this.client.signatureUrl(e, { expires: 60 * 60 });
76
76
  } catch (s) {
@@ -79,11 +79,11 @@ class n {
79
79
  }
80
80
  }
81
81
  a(n, "client"), a(n, "createTokenTime", 0), a(n, "expireTime", 15 * 60 * 1e3);
82
- const S = n.uploadFile.bind(n), f = n.generateSignedUrl.bind(n);
82
+ const f = n.uploadFile.bind(n), m = n.generateSignedUrl.bind(n);
83
83
  export {
84
84
  o as OssError,
85
85
  n as OssUploader,
86
- f as generateSignedUrl,
87
- S as uploadFile
86
+ m as generateSignedUrl,
87
+ f as uploadFile
88
88
  };
89
89
  //# sourceMappingURL=oss-uploader.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"oss-uploader.mjs","sources":["../../../../packages/utils/src/oss-uploader.ts"],"sourcesContent":["import OSS from 'ali-oss'\n\nexport interface OssCredentials {\n accessKeyId: string\n accessKeySecret: string\n securityToken: string\n}\n\nexport interface OssConfig extends Partial<Omit<OssClientConfig, 'accessKeyId' | 'accessKeySecret' | 'stsToken'>> {\n file: File\n onProgress?: (p: { percent: number }) => void\n path?: string\n getCredentials: () => Promise<OssCredentials | null>\n}\n\nexport interface OssClientConfig {\n accessKeyId: string\n accessKeySecret: string\n stsToken: string\n secure: boolean\n bucket: string\n region: string\n cors: boolean\n useFetch: boolean\n timeout: number\n headers: Record<string, string>\n}\n\n// 定义错误类型\nexport class OssError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'OssError'\n }\n}\n\nconst ossConfig: OssClientConfig = {\n accessKeyId: '',\n accessKeySecret: '',\n stsToken: '',\n secure: true,\n bucket: 'yao-file-daily',\n region: 'oss-cn-hangzhou',\n cors: true,\n useFetch: false,\n timeout: 60000,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\n 'Access-Control-Allow-Headers': '*',\n },\n}\n\nexport class OssUploader {\n private static client: OSS\n private static createTokenTime: number = 0\n private static readonly expireTime = 15 * 60 * 1000\n\n // 获取凭证\n private static async getOssCredentials(getCredentials: OssConfig['getCredentials']): Promise<Required<OssCredentials>> {\n const credentials = await getCredentials()\n if (!credentials) {\n throw new OssError('获取凭证失败')\n }\n return {\n accessKeyId: credentials.accessKeyId,\n accessKeySecret: credentials.accessKeySecret,\n securityToken: credentials.securityToken,\n }\n }\n\n // 修改初始化方法\n public static async initOssClient(getCredentials: OssConfig['getCredentials'], args?: Partial<OssConfig>): Promise<void> {\n const diff = Date.now() - this.createTokenTime\n if (!ossConfig.accessKeyId || diff > this.expireTime) {\n try {\n const { accessKeyId, accessKeySecret, securityToken: stsToken } = await this.getOssCredentials(getCredentials)\n Object.assign(ossConfig, {\n accessKeyId,\n accessKeySecret,\n stsToken,\n ...args,\n refreshSTSToken: async () => {\n return await this.getOssCredentials(getCredentials)\n },\n refreshSTSTokenInterval: 300000,\n })\n this.createTokenTime = Date.now()\n this.client = new OSS(ossConfig)\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n }\n\n // 修改上传方法\n public static async uploadFile(opts: OssConfig & { getCredentials: OssConfig['getCredentials'] }): Promise<OSS.MultipartUploadResult> {\n const { file, onProgress = () => {}, path = 'ksh/pdf', getCredentials } = opts\n\n await this.initOssClient(getCredentials)\n\n try {\n const result = await this.client.multipartUpload(`${path}/${file.name}`, file, {\n progress(p: number) {\n onProgress({ percent: Math.round(p * 100) })\n },\n })\n return result\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n\n // 修改生成签名URL方法\n public static async generateSignedUrl(\n objectKey: string,\n getCredentials: OssConfig['getCredentials'],\n args?: Partial<OssConfig>,\n ): Promise<string> {\n await this.initOssClient(getCredentials, args)\n try {\n return await this.client.signatureUrl(objectKey, { expires: 60 * 60 })\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n}\n\n// 导出便捷方法\nexport const uploadFile = OssUploader.uploadFile.bind(OssUploader)\nexport const generateSignedUrl = OssUploader.generateSignedUrl.bind(OssUploader)\n"],"names":["OssError","message","ossConfig","OssUploader","getCredentials","credentials","args","diff","accessKeyId","accessKeySecret","stsToken","OSS","error","opts","file","onProgress","path","p","objectKey","__publicField","uploadFile","generateSignedUrl"],"mappings":";;;;AA6BO,MAAMA,UAAiB,MAAM;AAAA,EAClC,YAAYC,GAAiB;AAC3B,UAAMA,CAAO,GACb,KAAK,OAAO;AAAA,EAAA;AAEhB;AAEA,MAAMC,IAA6B;AAAA,EACjC,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,IACP,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,EAAA;AAEpC;AAEO,MAAMC,EAAY;AAAA;AAAA,EAMvB,aAAqB,kBAAkBC,GAAgF;AAC/G,UAAAC,IAAc,MAAMD,EAAe;AACzC,QAAI,CAACC;AACG,YAAA,IAAIL,EAAS,QAAQ;AAEtB,WAAA;AAAA,MACL,aAAaK,EAAY;AAAA,MACzB,iBAAiBA,EAAY;AAAA,MAC7B,eAAeA,EAAY;AAAA,IAC7B;AAAA,EAAA;AAAA;AAAA,EAIF,aAAoB,cAAcD,GAA6CE,GAA0C;AACvH,UAAMC,IAAO,KAAK,IAAI,IAAI,KAAK;AAC/B,QAAI,CAACL,EAAU,eAAeK,IAAO,KAAK;AACpC,UAAA;AACI,cAAA,EAAE,aAAAC,GAAa,iBAAAC,GAAiB,eAAeC,MAAa,MAAM,KAAK,kBAAkBN,CAAc;AAC7G,eAAO,OAAOF,GAAW;AAAA,UACvB,aAAAM;AAAA,UACA,iBAAAC;AAAA,UACA,UAAAC;AAAA,UACA,GAAGJ;AAAA,UACH,iBAAiB,YACR,MAAM,KAAK,kBAAkBF,CAAc;AAAA,UAEpD,yBAAyB;AAAA,QAAA,CAC1B,GACI,KAAA,kBAAkB,KAAK,IAAI,GAC3B,KAAA,SAAS,IAAIO,EAAIT,CAAS;AAAA,eAE1BU,GAAO;AACN,cAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,MAAA;AAAA,EAE7E;AAAA;AAAA,EAIF,aAAoB,WAAWC,GAAuG;AAC9H,UAAA,EAAE,MAAAC,GAAM,YAAAC,IAAa,MAAM;AAAA,IAAI,GAAA,MAAAC,IAAO,WAAW,gBAAAZ,EAAA,IAAmBS;AAEpE,UAAA,KAAK,cAAcT,CAAc;AAEnC,QAAA;AAMK,aALQ,MAAM,KAAK,OAAO,gBAAgB,GAAGY,CAAI,IAAIF,EAAK,IAAI,IAAIA,GAAM;AAAA,QAC7E,SAASG,GAAW;AAClB,UAAAF,EAAW,EAAE,SAAS,KAAK,MAAME,IAAI,GAAG,GAAG;AAAA,QAAA;AAAA,MAC7C,CACD;AAAA,aAGIL,GAAO;AACN,YAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,IAAA;AAAA,EAC3E;AAAA;AAAA,EAIF,aAAoB,kBAClBM,GACAd,GACAE,GACiB;AACX,UAAA,KAAK,cAAcF,GAAgBE,CAAI;AACzC,QAAA;AACK,aAAA,MAAM,KAAK,OAAO,aAAaY,GAAW,EAAE,SAAS,KAAK,IAAI;AAAA,aAEhEN,GAAO;AACN,YAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,IAAA;AAAA,EAC3E;AAEJ;AA3EEO,EADWhB,GACI,WACfgB,EAFWhB,GAEI,mBAA0B,IACzCgB,EAHWhB,GAGa,cAAa,KAAK,KAAK;AA4E1C,MAAMiB,IAAajB,EAAY,WAAW,KAAKA,CAAW,GACpDkB,IAAoBlB,EAAY,kBAAkB,KAAKA,CAAW;"}
1
+ {"version":3,"file":"oss-uploader.mjs","sources":["../../../../packages/utils/src/oss-uploader.ts"],"sourcesContent":["import OSS from 'ali-oss'\n\nexport interface OssCredentials {\n accessKeyId: string\n accessKeySecret: string\n securityToken: string\n}\n\nexport interface OssConfig extends Partial<Omit<OssClientConfig, 'accessKeyId' | 'accessKeySecret' | 'stsToken'>> {\n file: File\n onProgress?: (p: { percent: number }) => void\n path?: string\n getCredentials: () => Promise<OssCredentials | null>\n}\n\nexport interface OssClientConfig {\n accessKeyId: string\n accessKeySecret: string\n stsToken: string\n secure: boolean\n bucket: string\n region: string\n cors: boolean\n useFetch: boolean\n timeout: number\n headers: Record<string, string>\n}\n\n// 定义错误类型\nexport class OssError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'OssError'\n }\n}\n\nconst ossConfig: OssClientConfig = {\n accessKeyId: '',\n accessKeySecret: '',\n stsToken: '',\n secure: true,\n bucket: 'yao-file-daily',\n region: 'oss-cn-hangzhou',\n cors: true,\n useFetch: false,\n timeout: 60000,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\n 'Access-Control-Allow-Headers': '*',\n },\n}\n\nexport class OssUploader {\n private static client: OSS\n private static createTokenTime: number = 0\n private static readonly expireTime = 15 * 60 * 1000\n\n // 获取凭证\n private static async getOssCredentials(getCredentials: OssConfig['getCredentials']): Promise<Required<OssCredentials>> {\n const credentials = await getCredentials()\n if (!credentials) {\n throw new OssError('获取凭证失败')\n }\n return {\n accessKeyId: credentials.accessKeyId,\n accessKeySecret: credentials.accessKeySecret,\n securityToken: credentials.securityToken,\n }\n }\n\n // 修改初始化方法\n public static async initOssClient(getCredentials: OssConfig['getCredentials'], args?: Partial<OssConfig>): Promise<void> {\n const diff = Date.now() - this.createTokenTime\n if (!ossConfig.accessKeyId || diff > this.expireTime) {\n try {\n const { accessKeyId, accessKeySecret, securityToken: stsToken } = await this.getOssCredentials(getCredentials)\n Object.assign(ossConfig, {\n accessKeyId,\n accessKeySecret,\n stsToken,\n ...args,\n refreshSTSToken: async () => {\n return await this.getOssCredentials(getCredentials)\n },\n refreshSTSTokenInterval: 300000,\n })\n this.createTokenTime = Date.now()\n this.client = new OSS(ossConfig)\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n }\n\n // 修改上传方法\n public static async uploadFile(opts: OssConfig & { getCredentials: OssConfig['getCredentials'] }): Promise<OSS.MultipartUploadResult> {\n const { file, onProgress = () => {}, path = 'ksh/pdf', getCredentials, ...rest } = opts\n\n await this.initOssClient(getCredentials, rest)\n\n try {\n const result = await this.client.multipartUpload(`${path}/${file.name}`, file, {\n progress(p: number) {\n onProgress({ percent: Math.round(p * 100) })\n },\n })\n return result\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n\n // 修改生成签名URL方法\n public static async generateSignedUrl(\n objectKey: string,\n getCredentials: OssConfig['getCredentials'],\n args?: Partial<OssConfig>,\n ): Promise<string> {\n await this.initOssClient(getCredentials, args)\n try {\n return await this.client.signatureUrl(objectKey, { expires: 60 * 60 })\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n}\n\n// 导出便捷方法\nexport const uploadFile = OssUploader.uploadFile.bind(OssUploader)\nexport const generateSignedUrl = OssUploader.generateSignedUrl.bind(OssUploader)\n"],"names":["OssError","message","ossConfig","OssUploader","getCredentials","credentials","args","diff","accessKeyId","accessKeySecret","stsToken","OSS","error","opts","file","onProgress","path","rest","p","objectKey","__publicField","uploadFile","generateSignedUrl"],"mappings":";;;;AA6BO,MAAMA,UAAiB,MAAM;AAAA,EAClC,YAAYC,GAAiB;AAC3B,UAAMA,CAAO,GACb,KAAK,OAAO;AAAA,EAAA;AAEhB;AAEA,MAAMC,IAA6B;AAAA,EACjC,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AAAA,IACP,+BAA+B;AAAA,IAC/B,gCAAgC;AAAA,IAChC,gCAAgC;AAAA,EAAA;AAEpC;AAEO,MAAMC,EAAY;AAAA;AAAA,EAMvB,aAAqB,kBAAkBC,GAAgF;AAC/G,UAAAC,IAAc,MAAMD,EAAe;AACzC,QAAI,CAACC;AACG,YAAA,IAAIL,EAAS,QAAQ;AAEtB,WAAA;AAAA,MACL,aAAaK,EAAY;AAAA,MACzB,iBAAiBA,EAAY;AAAA,MAC7B,eAAeA,EAAY;AAAA,IAC7B;AAAA,EAAA;AAAA;AAAA,EAIF,aAAoB,cAAcD,GAA6CE,GAA0C;AACvH,UAAMC,IAAO,KAAK,IAAI,IAAI,KAAK;AAC/B,QAAI,CAACL,EAAU,eAAeK,IAAO,KAAK;AACpC,UAAA;AACI,cAAA,EAAE,aAAAC,GAAa,iBAAAC,GAAiB,eAAeC,MAAa,MAAM,KAAK,kBAAkBN,CAAc;AAC7G,eAAO,OAAOF,GAAW;AAAA,UACvB,aAAAM;AAAA,UACA,iBAAAC;AAAA,UACA,UAAAC;AAAA,UACA,GAAGJ;AAAA,UACH,iBAAiB,YACR,MAAM,KAAK,kBAAkBF,CAAc;AAAA,UAEpD,yBAAyB;AAAA,QAAA,CAC1B,GACI,KAAA,kBAAkB,KAAK,IAAI,GAC3B,KAAA,SAAS,IAAIO,EAAIT,CAAS;AAAA,eAE1BU,GAAO;AACN,cAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,MAAA;AAAA,EAE7E;AAAA;AAAA,EAIF,aAAoB,WAAWC,GAAuG;AAC9H,UAAA,EAAE,MAAAC,GAAM,YAAAC,IAAa,MAAM;AAAA,OAAI,MAAAC,IAAO,WAAW,gBAAAZ,GAAgB,GAAGa,EAAS,IAAAJ;AAE7E,UAAA,KAAK,cAAcT,GAAgBa,CAAI;AAEzC,QAAA;AAMK,aALQ,MAAM,KAAK,OAAO,gBAAgB,GAAGD,CAAI,IAAIF,EAAK,IAAI,IAAIA,GAAM;AAAA,QAC7E,SAASI,GAAW;AAClB,UAAAH,EAAW,EAAE,SAAS,KAAK,MAAMG,IAAI,GAAG,GAAG;AAAA,QAAA;AAAA,MAC7C,CACD;AAAA,aAGIN,GAAO;AACN,YAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,IAAA;AAAA,EAC3E;AAAA;AAAA,EAIF,aAAoB,kBAClBO,GACAf,GACAE,GACiB;AACX,UAAA,KAAK,cAAcF,GAAgBE,CAAI;AACzC,QAAA;AACK,aAAA,MAAM,KAAK,OAAO,aAAaa,GAAW,EAAE,SAAS,KAAK,IAAI;AAAA,aAEhEP,GAAO;AACN,YAAA,IAAIZ,EAASY,aAAiB,QAAQA,EAAM,UAAU,OAAOA,CAAK,CAAC;AAAA,IAAA;AAAA,EAC3E;AAEJ;AA3EEQ,EADWjB,GACI,WACfiB,EAFWjB,GAEI,mBAA0B,IACzCiB,EAHWjB,GAGa,cAAa,KAAK,KAAK;AA4E1C,MAAMkB,IAAalB,EAAY,WAAW,KAAKA,CAAW,GACpDmB,IAAoBnB,EAAY,kBAAkB,KAAKA,CAAW;"}
package/lib/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './src/argo-log';
2
+ export * from './src/date-transfer';
2
3
  export * from './src/device';
3
4
  export * from './src/file-operations';
4
5
  export * from './src/json';
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./src/argo-log.js"),n=require("./src/device.js"),r=require("./src/file-operations.js"),o=require("./src/json.js"),i=require("./src/oss-uploader.js"),t=require("./src/storage.js"),e=require("./src/types.js"),a=require("./src/use-api.js"),l=require("./src/watermark.js");exports.ArgoLog=s.ArgoLog;exports.isMobile=n.isMobile;exports.createVideoUploader=r.createVideoUploader;exports.downloadFile=r.downloadFile;exports.JsonToExcel=o.JsonToExcel;exports.excelToJson=o.excelToJson;exports.OssError=i.OssError;exports.OssUploader=i.OssUploader;exports.generateSignedUrl=i.generateSignedUrl;exports.uploadFile=i.uploadFile;exports.Storage=t.Storage;exports.isBoolean=e.isBoolean;exports.isElement=e.isElement;exports.isImageByMimeType=e.isImageByMimeType;exports.isJSONString=e.isJSONString;exports.isNumber=e.isNumber;exports.isPlainObject=e.isPlainObject;exports.isUndefined=e.isUndefined;exports.isWindow=e.isWindow;exports.ApiService=a.ApiService;exports.watermark=l.watermark;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./src/argo-log.js"),n=require("./src/date-transfer.js"),t=require("./src/device.js"),i=require("./src/file-operations.js"),o=require("./src/json.js"),r=require("./src/oss-uploader.js"),a=require("./src/storage.js"),e=require("./src/types.js"),l=require("./src/use-api.js"),d=require("./src/watermark.js");exports.ArgoLog=s.ArgoLog;exports.formatTime=n.formatTime;exports.isMobile=t.isMobile;exports.createVideoUploader=i.createVideoUploader;exports.downloadFile=i.downloadFile;exports.JsonToExcel=o.JsonToExcel;exports.excelToJson=o.excelToJson;exports.OssError=r.OssError;exports.OssUploader=r.OssUploader;exports.generateSignedUrl=r.generateSignedUrl;exports.uploadFile=r.uploadFile;exports.Storage=a.Storage;exports.isBoolean=e.isBoolean;exports.isElement=e.isElement;exports.isImageByMimeType=e.isImageByMimeType;exports.isJSONString=e.isJSONString;exports.isNumber=e.isNumber;exports.isPlainObject=e.isPlainObject;exports.isUndefined=e.isUndefined;exports.isWindow=e.isWindow;exports.ApiService=l.ApiService;exports.watermark=d.watermark;
2
2
  //# sourceMappingURL=index.js.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * 统一的时间转换函数
3
+ * @param {number|string|Date} time - 输入时间(时间戳、日期字符串或Date对象)
4
+ * @param {object} options - 配置选项
5
+ * @param {boolean} options.isMs - 输入是否为毫秒,默认false(秒)
6
+ * @param {string} options.format - 输出格式:'duration'(持续时间)| 'relative'(相对时间),默认'duration'
7
+ * @param {string} options.separator - 时间分隔符,默认':'
8
+ * @param {boolean} options.complete - 是否显示完整时间格式,默认false
9
+ * @param {boolean} options.showDate - 是否显示日期部分,默认true
10
+ * @param {boolean} options.showTime - 是否显示时间部分,默认true
11
+ * @returns {string} 格式化后的时间字符串
12
+ */
13
+ export declare function formatTime(time: number | string | Date, { isMs, format, separator, complete, showDate, showTime, }?: {
14
+ isMs?: boolean | undefined;
15
+ format?: string | undefined;
16
+ separator?: string | undefined;
17
+ complete?: boolean | undefined;
18
+ showDate?: boolean | undefined;
19
+ showTime?: boolean | undefined;
20
+ }): string;
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c={thresholds:{second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},units:{year:31536e6,month:2592e6,day:864e5,hour:36e5,minute:6e4,second:1e3},labels:{relative:{justNow:"刚刚",seconds:"几秒前",minutes:"分钟前",hours:"小时前",days:"天前",months:"个月前",years:"年前"}}};function p(i,{isMs:m=!1,format:d="duration",separator:$=":",complete:y=!1,showDate:M=!0,showTime:S=!0}={}){let e;if(typeof i=="number")e=m?i:i*1e3;else{const r=Date.now(),t=new Date(i).getTime();e=d==="relative"?r-t:t}if(Number.isNaN(e)||e<0)throw new Error("无效的时间输入");if(d==="relative"){const{justNow:r,seconds:t,minutes:f,hours:w,days:N,months:T,years:b}=c.labels.relative,o=c.thresholds;return e<o.second?r:e<o.minute?t:e<o.hour?`${Math.floor(e/o.minute)}${f}`:e<o.day?`${Math.floor(e/o.hour)}${w}`:e<o.month?`${Math.floor(e/o.day)}${N}`:e<o.year?`${Math.floor(e/o.month)}${T}`:`${Math.floor(e/o.year)}${b}`}const l=[],u=Math.floor(e/1e3),h=Math.floor(u/(24*3600)),a=Math.floor(u%(24*3600)/3600),s=Math.floor(u%3600/60),n=u%60;if(M&&h>0&&l.push(`${h}天`),S){const r=f=>String(f).padStart(2,"0");let t="";y?t=`${r(a)}${$}${r(s)}${$}${r(n)}`:h>0?(t=a>0?`${a}小时`:"",t+=s>0?`${s}分钟`:""):a>0?(t=`${a}小时`,t+=s>0?`${s}分钟`:"",t+=n>0?`${n}秒`:""):s>0?(t=`${s}分钟`,t+=n>0?`${n}秒`:""):t=`${n}秒`,t&&l.push(t)}return l.join(" ")}exports.formatTime=p;
2
+ //# sourceMappingURL=date-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-transfer.js","sources":["../../../../packages/utils/src/date-transfer.ts"],"sourcesContent":["// 将阈值和时间单位合并为一个常量对象\nconst TIME_CONSTANTS = {\n thresholds: {\n second: 1000,\n minute: 60000,\n hour: 3600000,\n day: 86400000,\n month: 2592000000,\n year: 31536000000,\n },\n units: {\n year: 31536000000,\n month: 2592000000,\n day: 86400000,\n hour: 3600000,\n minute: 60000,\n second: 1000,\n },\n labels: {\n relative: {\n justNow: '刚刚',\n seconds: '几秒前',\n minutes: '分钟前',\n hours: '小时前',\n days: '天前',\n months: '个月前',\n years: '年前',\n },\n },\n}\n\n/**\n * 统一的时间转换函数\n * @param {number|string|Date} time - 输入时间(时间戳、日期字符串或Date对象)\n * @param {object} options - 配置选项\n * @param {boolean} options.isMs - 输入是否为毫秒,默认false(秒)\n * @param {string} options.format - 输出格式:'duration'(持续时间)| 'relative'(相对时间),默认'duration'\n * @param {string} options.separator - 时间分隔符,默认':'\n * @param {boolean} options.complete - 是否显示完整时间格式,默认false\n * @param {boolean} options.showDate - 是否显示日期部分,默认true\n * @param {boolean} options.showTime - 是否显示时间部分,默认true\n * @returns {string} 格式化后的时间字符串\n */\nexport function formatTime(\n time: number | string | Date,\n {\n isMs = false,\n format = 'duration',\n separator = ':',\n complete = false,\n showDate = true,\n showTime = true,\n } = {},\n) {\n // 处理输入时间\n let ms: number\n\n if (typeof time === 'number') {\n ms = isMs ? time : time * 1000\n }\n else {\n const now = Date.now()\n const timestamp = new Date(time).getTime()\n ms = format === 'relative' ? now - timestamp : timestamp\n }\n\n // 验证输入\n if (Number.isNaN(ms) || ms < 0) {\n throw new Error('无效的时间输入')\n }\n\n // 相对时间格式\n if (format === 'relative') {\n const { justNow, seconds, minutes, hours, days, months, years }\n = TIME_CONSTANTS.labels.relative\n const thresholds = TIME_CONSTANTS.thresholds\n\n if (ms < thresholds.second) {\n return justNow\n }\n if (ms < thresholds.minute) {\n return seconds\n }\n if (ms < thresholds.hour) {\n return `${Math.floor(ms / thresholds.minute)}${minutes}`\n }\n if (ms < thresholds.day) {\n return `${Math.floor(ms / thresholds.hour)}${hours}`\n }\n if (ms < thresholds.month) {\n return `${Math.floor(ms / thresholds.day)}${days}`\n }\n if (ms < thresholds.year) {\n return `${Math.floor(ms / thresholds.month)}${months}`\n }\n return `${Math.floor(ms / thresholds.year)}${years}`\n }\n\n // 持续时间格式\n const result = []\n const totalSeconds = Math.floor(ms / 1000)\n const days = Math.floor(totalSeconds / (24 * 3600))\n const hours = Math.floor((totalSeconds % (24 * 3600)) / 3600)\n const minutes = Math.floor((totalSeconds % 3600) / 60)\n const seconds = totalSeconds % 60\n\n // 处理日期部分\n if (showDate && days > 0) {\n result.push(`${days}天`)\n }\n\n // 处理时间部分\n if (showTime) {\n const pad = (num: number): string => String(num).padStart(2, '0')\n let timeStr = ''\n\n if (complete) {\n timeStr = `${pad(hours)}${separator}${pad(minutes)}${separator}${pad(seconds)}`\n }\n else {\n if (days > 0) {\n timeStr = hours > 0 ? `${hours}小时` : ''\n timeStr += minutes > 0 ? `${minutes}分钟` : ''\n }\n else if (hours > 0) {\n timeStr = `${hours}小时`\n timeStr += minutes > 0 ? `${minutes}分钟` : ''\n timeStr += seconds > 0 ? `${seconds}秒` : ''\n }\n else if (minutes > 0) {\n timeStr = `${minutes}分钟`\n timeStr += seconds > 0 ? `${seconds}秒` : ''\n }\n else {\n timeStr = `${seconds}秒`\n }\n }\n if (timeStr) {\n result.push(timeStr)\n }\n }\n\n return result.join(' ')\n}\n"],"names":["TIME_CONSTANTS","formatTime","time","isMs","format","separator","complete","showDate","showTime","ms","now","timestamp","justNow","seconds","minutes","hours","days","months","years","thresholds","result","totalSeconds","pad","num","timeStr"],"mappings":"gFACA,MAAMA,EAAiB,CACrB,WAAY,CACV,OAAQ,IACR,OAAQ,IACR,KAAM,KACN,IAAK,MACL,MAAO,OACP,KAAM,OACR,EACA,MAAO,CACL,KAAM,QACN,MAAO,OACP,IAAK,MACL,KAAM,KACN,OAAQ,IACR,OAAQ,GACV,EACA,OAAQ,CACN,SAAU,CACR,QAAS,KACT,QAAS,MACT,QAAS,MACT,MAAO,MACP,KAAM,KACN,OAAQ,MACR,MAAO,IAAA,CACT,CAEJ,EAcO,SAASC,EACdC,EACA,CACE,KAAAC,EAAO,GACP,OAAAC,EAAS,WACT,UAAAC,EAAY,IACZ,SAAAC,EAAW,GACX,SAAAC,EAAW,GACX,SAAAC,EAAW,EACb,EAAI,GACJ,CAEI,IAAAC,EAEA,GAAA,OAAOP,GAAS,SACbO,EAAAN,EAAOD,EAAOA,EAAO,QAEvB,CACG,MAAAQ,EAAM,KAAK,IAAI,EACfC,EAAY,IAAI,KAAKT,CAAI,EAAE,QAAQ,EACpCO,EAAAL,IAAW,WAAaM,EAAMC,EAAYA,CAAA,CAIjD,GAAI,OAAO,MAAMF,CAAE,GAAKA,EAAK,EACrB,MAAA,IAAI,MAAM,SAAS,EAI3B,GAAIL,IAAW,WAAY,CACzB,KAAM,CAAE,QAAAQ,EAAS,QAAAC,EAAS,QAAAC,EAAS,MAAAC,EAAO,KAAAC,EAAM,OAAAC,EAAQ,MAAAC,CAAM,EAC1DlB,EAAe,OAAO,SACpBmB,EAAanB,EAAe,WAE9B,OAAAS,EAAKU,EAAW,OACXP,EAELH,EAAKU,EAAW,OACXN,EAELJ,EAAKU,EAAW,KACX,GAAG,KAAK,MAAMV,EAAKU,EAAW,MAAM,CAAC,GAAGL,CAAO,GAEpDL,EAAKU,EAAW,IACX,GAAG,KAAK,MAAMV,EAAKU,EAAW,IAAI,CAAC,GAAGJ,CAAK,GAEhDN,EAAKU,EAAW,MACX,GAAG,KAAK,MAAMV,EAAKU,EAAW,GAAG,CAAC,GAAGH,CAAI,GAE9CP,EAAKU,EAAW,KACX,GAAG,KAAK,MAAMV,EAAKU,EAAW,KAAK,CAAC,GAAGF,CAAM,GAE/C,GAAG,KAAK,MAAMR,EAAKU,EAAW,IAAI,CAAC,GAAGD,CAAK,EAAA,CAIpD,MAAME,EAAS,CAAC,EACVC,EAAe,KAAK,MAAMZ,EAAK,GAAI,EACnCO,EAAO,KAAK,MAAMK,GAAgB,GAAK,KAAK,EAC5CN,EAAQ,KAAK,MAAOM,GAAgB,GAAK,MAAS,IAAI,EACtDP,EAAU,KAAK,MAAOO,EAAe,KAAQ,EAAE,EAC/CR,EAAUQ,EAAe,GAQ/B,GALId,GAAYS,EAAO,GACdI,EAAA,KAAK,GAAGJ,CAAI,GAAG,EAIpBR,EAAU,CACN,MAAAc,EAAOC,GAAwB,OAAOA,CAAG,EAAE,SAAS,EAAG,GAAG,EAChE,IAAIC,EAAU,GAEVlB,EACFkB,EAAU,GAAGF,EAAIP,CAAK,CAAC,GAAGV,CAAS,GAAGiB,EAAIR,CAAO,CAAC,GAAGT,CAAS,GAAGiB,EAAIT,CAAO,CAAC,GAGzEG,EAAO,GACTQ,EAAUT,EAAQ,EAAI,GAAGA,CAAK,KAAO,GACrCS,GAAWV,EAAU,EAAI,GAAGA,CAAO,KAAO,IAEnCC,EAAQ,GACfS,EAAU,GAAGT,CAAK,KAClBS,GAAWV,EAAU,EAAI,GAAGA,CAAO,KAAO,GAC1CU,GAAWX,EAAU,EAAI,GAAGA,CAAO,IAAM,IAElCC,EAAU,GACjBU,EAAU,GAAGV,CAAO,KACpBU,GAAWX,EAAU,EAAI,GAAGA,CAAO,IAAM,IAGzCW,EAAU,GAAGX,CAAO,IAGpBW,GACFJ,EAAO,KAAKI,CAAO,CACrB,CAGK,OAAAJ,EAAO,KAAK,GAAG,CACxB"}
@@ -1,2 +1,2 @@
1
- "use strict";var h=Object.defineProperty;var g=(n,e,s)=>e in n?h(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var o=(n,e,s)=>g(n,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("../_virtual/aliyun-oss-sdk.js");class a extends Error{constructor(e){super(e),this.name="OssError"}}const d={accessKeyId:"",accessKeySecret:"",stsToken:"",secure:!0,bucket:"yao-file-daily",region:"oss-cn-hangzhou",cors:!0,useFetch:!1,timeout:6e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE","Access-Control-Allow-Headers":"*"}};class r{static async getOssCredentials(e){const s=await e();if(!s)throw new a("获取凭证失败");return{accessKeyId:s.accessKeyId,accessKeySecret:s.accessKeySecret,securityToken:s.securityToken}}static async initOssClient(e,s){const c=Date.now()-this.createTokenTime;if(!d.accessKeyId||c>this.expireTime)try{const{accessKeyId:t,accessKeySecret:l,securityToken:i}=await this.getOssCredentials(e);Object.assign(d,{accessKeyId:t,accessKeySecret:l,stsToken:i,...s,refreshSTSToken:async()=>await this.getOssCredentials(e),refreshSTSTokenInterval:3e5}),this.createTokenTime=Date.now(),this.client=new y.default(d)}catch(t){throw new a(t instanceof Error?t.message:String(t))}}static async uploadFile(e){const{file:s,onProgress:c=()=>{},path:t="ksh/pdf",getCredentials:l}=e;await this.initOssClient(l);try{return await this.client.multipartUpload(`${t}/${s.name}`,s,{progress(u){c({percent:Math.round(u*100)})}})}catch(i){throw new a(i instanceof Error?i.message:String(i))}}static async generateSignedUrl(e,s,c){await this.initOssClient(s,c);try{return await this.client.signatureUrl(e,{expires:60*60})}catch(t){throw new a(t instanceof Error?t.message:String(t))}}}o(r,"client"),o(r,"createTokenTime",0),o(r,"expireTime",15*60*1e3);const T=r.uploadFile.bind(r),w=r.generateSignedUrl.bind(r);exports.OssError=a;exports.OssUploader=r;exports.generateSignedUrl=w;exports.uploadFile=T;
1
+ "use strict";var g=Object.defineProperty;var y=(n,e,s)=>e in n?g(n,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[e]=s;var o=(n,e,s)=>y(n,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("../_virtual/aliyun-oss-sdk.js");class c extends Error{constructor(e){super(e),this.name="OssError"}}const u={accessKeyId:"",accessKeySecret:"",stsToken:"",secure:!0,bucket:"yao-file-daily",region:"oss-cn-hangzhou",cors:!0,useFetch:!1,timeout:6e4,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET, POST, PUT, DELETE","Access-Control-Allow-Headers":"*"}};class r{static async getOssCredentials(e){const s=await e();if(!s)throw new c("获取凭证失败");return{accessKeyId:s.accessKeyId,accessKeySecret:s.accessKeySecret,securityToken:s.securityToken}}static async initOssClient(e,s){const i=Date.now()-this.createTokenTime;if(!u.accessKeyId||i>this.expireTime)try{const{accessKeyId:t,accessKeySecret:l,securityToken:d}=await this.getOssCredentials(e);Object.assign(u,{accessKeyId:t,accessKeySecret:l,stsToken:d,...s,refreshSTSToken:async()=>await this.getOssCredentials(e),refreshSTSTokenInterval:3e5}),this.createTokenTime=Date.now(),this.client=new T.default(u)}catch(t){throw new c(t instanceof Error?t.message:String(t))}}static async uploadFile(e){const{file:s,onProgress:i=()=>{},path:t="ksh/pdf",getCredentials:l,...d}=e;await this.initOssClient(l,d);try{return await this.client.multipartUpload(`${t}/${s.name}`,s,{progress(h){i({percent:Math.round(h*100)})}})}catch(a){throw new c(a instanceof Error?a.message:String(a))}}static async generateSignedUrl(e,s,i){await this.initOssClient(s,i);try{return await this.client.signatureUrl(e,{expires:60*60})}catch(t){throw new c(t instanceof Error?t.message:String(t))}}}o(r,"client"),o(r,"createTokenTime",0),o(r,"expireTime",15*60*1e3);const w=r.uploadFile.bind(r),S=r.generateSignedUrl.bind(r);exports.OssError=c;exports.OssUploader=r;exports.generateSignedUrl=S;exports.uploadFile=w;
2
2
  //# sourceMappingURL=oss-uploader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"oss-uploader.js","sources":["../../../../packages/utils/src/oss-uploader.ts"],"sourcesContent":["import OSS from 'ali-oss'\n\nexport interface OssCredentials {\n accessKeyId: string\n accessKeySecret: string\n securityToken: string\n}\n\nexport interface OssConfig extends Partial<Omit<OssClientConfig, 'accessKeyId' | 'accessKeySecret' | 'stsToken'>> {\n file: File\n onProgress?: (p: { percent: number }) => void\n path?: string\n getCredentials: () => Promise<OssCredentials | null>\n}\n\nexport interface OssClientConfig {\n accessKeyId: string\n accessKeySecret: string\n stsToken: string\n secure: boolean\n bucket: string\n region: string\n cors: boolean\n useFetch: boolean\n timeout: number\n headers: Record<string, string>\n}\n\n// 定义错误类型\nexport class OssError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'OssError'\n }\n}\n\nconst ossConfig: OssClientConfig = {\n accessKeyId: '',\n accessKeySecret: '',\n stsToken: '',\n secure: true,\n bucket: 'yao-file-daily',\n region: 'oss-cn-hangzhou',\n cors: true,\n useFetch: false,\n timeout: 60000,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\n 'Access-Control-Allow-Headers': '*',\n },\n}\n\nexport class OssUploader {\n private static client: OSS\n private static createTokenTime: number = 0\n private static readonly expireTime = 15 * 60 * 1000\n\n // 获取凭证\n private static async getOssCredentials(getCredentials: OssConfig['getCredentials']): Promise<Required<OssCredentials>> {\n const credentials = await getCredentials()\n if (!credentials) {\n throw new OssError('获取凭证失败')\n }\n return {\n accessKeyId: credentials.accessKeyId,\n accessKeySecret: credentials.accessKeySecret,\n securityToken: credentials.securityToken,\n }\n }\n\n // 修改初始化方法\n public static async initOssClient(getCredentials: OssConfig['getCredentials'], args?: Partial<OssConfig>): Promise<void> {\n const diff = Date.now() - this.createTokenTime\n if (!ossConfig.accessKeyId || diff > this.expireTime) {\n try {\n const { accessKeyId, accessKeySecret, securityToken: stsToken } = await this.getOssCredentials(getCredentials)\n Object.assign(ossConfig, {\n accessKeyId,\n accessKeySecret,\n stsToken,\n ...args,\n refreshSTSToken: async () => {\n return await this.getOssCredentials(getCredentials)\n },\n refreshSTSTokenInterval: 300000,\n })\n this.createTokenTime = Date.now()\n this.client = new OSS(ossConfig)\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n }\n\n // 修改上传方法\n public static async uploadFile(opts: OssConfig & { getCredentials: OssConfig['getCredentials'] }): Promise<OSS.MultipartUploadResult> {\n const { file, onProgress = () => {}, path = 'ksh/pdf', getCredentials } = opts\n\n await this.initOssClient(getCredentials)\n\n try {\n const result = await this.client.multipartUpload(`${path}/${file.name}`, file, {\n progress(p: number) {\n onProgress({ percent: Math.round(p * 100) })\n },\n })\n return result\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n\n // 修改生成签名URL方法\n public static async generateSignedUrl(\n objectKey: string,\n getCredentials: OssConfig['getCredentials'],\n args?: Partial<OssConfig>,\n ): Promise<string> {\n await this.initOssClient(getCredentials, args)\n try {\n return await this.client.signatureUrl(objectKey, { expires: 60 * 60 })\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n}\n\n// 导出便捷方法\nexport const uploadFile = OssUploader.uploadFile.bind(OssUploader)\nexport const generateSignedUrl = OssUploader.generateSignedUrl.bind(OssUploader)\n"],"names":["OssError","message","ossConfig","OssUploader","getCredentials","credentials","args","diff","accessKeyId","accessKeySecret","stsToken","OSS","error","opts","file","onProgress","path","p","objectKey","__publicField","uploadFile","generateSignedUrl"],"mappings":"qSA6BO,MAAMA,UAAiB,KAAM,CAClC,YAAYC,EAAiB,CAC3B,MAAMA,CAAO,EACb,KAAK,KAAO,UAAA,CAEhB,CAEA,MAAMC,EAA6B,CACjC,YAAa,GACb,gBAAiB,GACjB,SAAU,GACV,OAAQ,GACR,OAAQ,iBACR,OAAQ,kBACR,KAAM,GACN,SAAU,GACV,QAAS,IACT,QAAS,CACP,8BAA+B,IAC/B,+BAAgC,yBAChC,+BAAgC,GAAA,CAEpC,EAEO,MAAMC,CAAY,CAMvB,aAAqB,kBAAkBC,EAAgF,CAC/G,MAAAC,EAAc,MAAMD,EAAe,EACzC,GAAI,CAACC,EACG,MAAA,IAAIL,EAAS,QAAQ,EAEtB,MAAA,CACL,YAAaK,EAAY,YACzB,gBAAiBA,EAAY,gBAC7B,cAAeA,EAAY,aAC7B,CAAA,CAIF,aAAoB,cAAcD,EAA6CE,EAA0C,CACvH,MAAMC,EAAO,KAAK,IAAI,EAAI,KAAK,gBAC/B,GAAI,CAACL,EAAU,aAAeK,EAAO,KAAK,WACpC,GAAA,CACI,KAAA,CAAE,YAAAC,EAAa,gBAAAC,EAAiB,cAAeC,GAAa,MAAM,KAAK,kBAAkBN,CAAc,EAC7G,OAAO,OAAOF,EAAW,CACvB,YAAAM,EACA,gBAAAC,EACA,SAAAC,EACA,GAAGJ,EACH,gBAAiB,SACR,MAAM,KAAK,kBAAkBF,CAAc,EAEpD,wBAAyB,GAAA,CAC1B,EACI,KAAA,gBAAkB,KAAK,IAAI,EAC3B,KAAA,OAAS,IAAIO,EAAA,QAAIT,CAAS,QAE1BU,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAE7E,CAIF,aAAoB,WAAWC,EAAuG,CAC9H,KAAA,CAAE,KAAAC,EAAM,WAAAC,EAAa,IAAM,CAAI,EAAA,KAAAC,EAAO,UAAW,eAAAZ,CAAA,EAAmBS,EAEpE,MAAA,KAAK,cAAcT,CAAc,EAEnC,GAAA,CAMK,OALQ,MAAM,KAAK,OAAO,gBAAgB,GAAGY,CAAI,IAAIF,EAAK,IAAI,GAAIA,EAAM,CAC7E,SAASG,EAAW,CAClBF,EAAW,CAAE,QAAS,KAAK,MAAME,EAAI,GAAG,EAAG,CAAA,CAC7C,CACD,QAGIL,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAC3E,CAIF,aAAoB,kBAClBM,EACAd,EACAE,EACiB,CACX,MAAA,KAAK,cAAcF,EAAgBE,CAAI,EACzC,GAAA,CACK,OAAA,MAAM,KAAK,OAAO,aAAaY,EAAW,CAAE,QAAS,GAAK,GAAI,QAEhEN,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAC3E,CAEJ,CA3EEO,EADWhB,EACI,UACfgB,EAFWhB,EAEI,kBAA0B,GACzCgB,EAHWhB,EAGa,aAAa,GAAK,GAAK,KA4E1C,MAAMiB,EAAajB,EAAY,WAAW,KAAKA,CAAW,EACpDkB,EAAoBlB,EAAY,kBAAkB,KAAKA,CAAW"}
1
+ {"version":3,"file":"oss-uploader.js","sources":["../../../../packages/utils/src/oss-uploader.ts"],"sourcesContent":["import OSS from 'ali-oss'\n\nexport interface OssCredentials {\n accessKeyId: string\n accessKeySecret: string\n securityToken: string\n}\n\nexport interface OssConfig extends Partial<Omit<OssClientConfig, 'accessKeyId' | 'accessKeySecret' | 'stsToken'>> {\n file: File\n onProgress?: (p: { percent: number }) => void\n path?: string\n getCredentials: () => Promise<OssCredentials | null>\n}\n\nexport interface OssClientConfig {\n accessKeyId: string\n accessKeySecret: string\n stsToken: string\n secure: boolean\n bucket: string\n region: string\n cors: boolean\n useFetch: boolean\n timeout: number\n headers: Record<string, string>\n}\n\n// 定义错误类型\nexport class OssError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'OssError'\n }\n}\n\nconst ossConfig: OssClientConfig = {\n accessKeyId: '',\n accessKeySecret: '',\n stsToken: '',\n secure: true,\n bucket: 'yao-file-daily',\n region: 'oss-cn-hangzhou',\n cors: true,\n useFetch: false,\n timeout: 60000,\n headers: {\n 'Access-Control-Allow-Origin': '*',\n 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',\n 'Access-Control-Allow-Headers': '*',\n },\n}\n\nexport class OssUploader {\n private static client: OSS\n private static createTokenTime: number = 0\n private static readonly expireTime = 15 * 60 * 1000\n\n // 获取凭证\n private static async getOssCredentials(getCredentials: OssConfig['getCredentials']): Promise<Required<OssCredentials>> {\n const credentials = await getCredentials()\n if (!credentials) {\n throw new OssError('获取凭证失败')\n }\n return {\n accessKeyId: credentials.accessKeyId,\n accessKeySecret: credentials.accessKeySecret,\n securityToken: credentials.securityToken,\n }\n }\n\n // 修改初始化方法\n public static async initOssClient(getCredentials: OssConfig['getCredentials'], args?: Partial<OssConfig>): Promise<void> {\n const diff = Date.now() - this.createTokenTime\n if (!ossConfig.accessKeyId || diff > this.expireTime) {\n try {\n const { accessKeyId, accessKeySecret, securityToken: stsToken } = await this.getOssCredentials(getCredentials)\n Object.assign(ossConfig, {\n accessKeyId,\n accessKeySecret,\n stsToken,\n ...args,\n refreshSTSToken: async () => {\n return await this.getOssCredentials(getCredentials)\n },\n refreshSTSTokenInterval: 300000,\n })\n this.createTokenTime = Date.now()\n this.client = new OSS(ossConfig)\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n }\n\n // 修改上传方法\n public static async uploadFile(opts: OssConfig & { getCredentials: OssConfig['getCredentials'] }): Promise<OSS.MultipartUploadResult> {\n const { file, onProgress = () => {}, path = 'ksh/pdf', getCredentials, ...rest } = opts\n\n await this.initOssClient(getCredentials, rest)\n\n try {\n const result = await this.client.multipartUpload(`${path}/${file.name}`, file, {\n progress(p: number) {\n onProgress({ percent: Math.round(p * 100) })\n },\n })\n return result\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n\n // 修改生成签名URL方法\n public static async generateSignedUrl(\n objectKey: string,\n getCredentials: OssConfig['getCredentials'],\n args?: Partial<OssConfig>,\n ): Promise<string> {\n await this.initOssClient(getCredentials, args)\n try {\n return await this.client.signatureUrl(objectKey, { expires: 60 * 60 })\n }\n catch (error) {\n throw new OssError(error instanceof Error ? error.message : String(error))\n }\n }\n}\n\n// 导出便捷方法\nexport const uploadFile = OssUploader.uploadFile.bind(OssUploader)\nexport const generateSignedUrl = OssUploader.generateSignedUrl.bind(OssUploader)\n"],"names":["OssError","message","ossConfig","OssUploader","getCredentials","credentials","args","diff","accessKeyId","accessKeySecret","stsToken","OSS","error","opts","file","onProgress","path","rest","p","objectKey","__publicField","uploadFile","generateSignedUrl"],"mappings":"qSA6BO,MAAMA,UAAiB,KAAM,CAClC,YAAYC,EAAiB,CAC3B,MAAMA,CAAO,EACb,KAAK,KAAO,UAAA,CAEhB,CAEA,MAAMC,EAA6B,CACjC,YAAa,GACb,gBAAiB,GACjB,SAAU,GACV,OAAQ,GACR,OAAQ,iBACR,OAAQ,kBACR,KAAM,GACN,SAAU,GACV,QAAS,IACT,QAAS,CACP,8BAA+B,IAC/B,+BAAgC,yBAChC,+BAAgC,GAAA,CAEpC,EAEO,MAAMC,CAAY,CAMvB,aAAqB,kBAAkBC,EAAgF,CAC/G,MAAAC,EAAc,MAAMD,EAAe,EACzC,GAAI,CAACC,EACG,MAAA,IAAIL,EAAS,QAAQ,EAEtB,MAAA,CACL,YAAaK,EAAY,YACzB,gBAAiBA,EAAY,gBAC7B,cAAeA,EAAY,aAC7B,CAAA,CAIF,aAAoB,cAAcD,EAA6CE,EAA0C,CACvH,MAAMC,EAAO,KAAK,IAAI,EAAI,KAAK,gBAC/B,GAAI,CAACL,EAAU,aAAeK,EAAO,KAAK,WACpC,GAAA,CACI,KAAA,CAAE,YAAAC,EAAa,gBAAAC,EAAiB,cAAeC,GAAa,MAAM,KAAK,kBAAkBN,CAAc,EAC7G,OAAO,OAAOF,EAAW,CACvB,YAAAM,EACA,gBAAAC,EACA,SAAAC,EACA,GAAGJ,EACH,gBAAiB,SACR,MAAM,KAAK,kBAAkBF,CAAc,EAEpD,wBAAyB,GAAA,CAC1B,EACI,KAAA,gBAAkB,KAAK,IAAI,EAC3B,KAAA,OAAS,IAAIO,EAAA,QAAIT,CAAS,QAE1BU,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAE7E,CAIF,aAAoB,WAAWC,EAAuG,CAC9H,KAAA,CAAE,KAAAC,EAAM,WAAAC,EAAa,IAAM,GAAI,KAAAC,EAAO,UAAW,eAAAZ,EAAgB,GAAGa,CAAS,EAAAJ,EAE7E,MAAA,KAAK,cAAcT,EAAgBa,CAAI,EAEzC,GAAA,CAMK,OALQ,MAAM,KAAK,OAAO,gBAAgB,GAAGD,CAAI,IAAIF,EAAK,IAAI,GAAIA,EAAM,CAC7E,SAASI,EAAW,CAClBH,EAAW,CAAE,QAAS,KAAK,MAAMG,EAAI,GAAG,EAAG,CAAA,CAC7C,CACD,QAGIN,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAC3E,CAIF,aAAoB,kBAClBO,EACAf,EACAE,EACiB,CACX,MAAA,KAAK,cAAcF,EAAgBE,CAAI,EACzC,GAAA,CACK,OAAA,MAAM,KAAK,OAAO,aAAaa,EAAW,CAAE,QAAS,GAAK,GAAI,QAEhEP,EAAO,CACN,MAAA,IAAIZ,EAASY,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,CAAC,CAAA,CAC3E,CAEJ,CA3EEQ,EADWjB,EACI,UACfiB,EAFWjB,EAEI,kBAA0B,GACzCiB,EAHWjB,EAGa,aAAa,GAAK,GAAK,KA4E1C,MAAMkB,EAAalB,EAAY,WAAW,KAAKA,CAAW,EACpDmB,EAAoBnB,EAAY,kBAAkB,KAAKA,CAAW"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qxs-bns/utils",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.mjs",
6
6
  "types": "es/index.d.ts",