@qxs-bns/utils 0.0.16 → 0.0.18

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 (132) hide show
  1. package/es/index.js +11 -0
  2. package/es/index.js.map +1 -0
  3. package/es/src/argo-log.js +78 -0
  4. package/es/src/argo-log.js.map +1 -0
  5. package/es/src/date-transfer.js +34 -0
  6. package/es/src/date-transfer.js.map +1 -0
  7. package/es/src/device.js +23 -0
  8. package/es/src/device.js.map +1 -0
  9. package/es/src/file-operations.js +105 -0
  10. package/es/src/file-operations.js.map +1 -0
  11. package/es/src/json.js +67 -0
  12. package/es/src/json.js.map +1 -0
  13. package/es/src/oss-uploader.js +115 -0
  14. package/es/src/oss-uploader.js.map +1 -0
  15. package/es/src/storage.js +113 -0
  16. package/es/src/storage.js.map +1 -0
  17. package/es/src/types.js +38 -0
  18. package/es/src/types.js.map +1 -0
  19. package/es/src/use-api.js +65 -0
  20. package/es/src/use-api.js.map +1 -0
  21. package/es/src/watermark.js +209 -0
  22. package/es/src/watermark.js.map +1 -0
  23. package/lib/index.js +40 -1
  24. package/lib/index.js.map +1 -1
  25. package/lib/src/argo-log.js +79 -1
  26. package/lib/src/argo-log.js.map +1 -1
  27. package/lib/src/date-transfer.js +35 -1
  28. package/lib/src/date-transfer.js.map +1 -1
  29. package/lib/src/device.js +27 -1
  30. package/lib/src/device.js.map +1 -1
  31. package/lib/src/file-operations.js +107 -1
  32. package/lib/src/file-operations.js.map +1 -1
  33. package/lib/src/json.js +69 -1
  34. package/lib/src/json.js.map +1 -1
  35. package/lib/src/oss-uploader.js +119 -1
  36. package/lib/src/oss-uploader.js.map +1 -1
  37. package/lib/src/storage.js +114 -1
  38. package/lib/src/storage.js.map +1 -1
  39. package/lib/src/types.js +46 -1
  40. package/lib/src/types.js.map +1 -1
  41. package/lib/src/use-api.js +66 -1
  42. package/lib/src/use-api.js.map +1 -1
  43. package/lib/src/watermark.js +192 -13
  44. package/lib/src/watermark.js.map +1 -1
  45. package/package.json +26 -27
  46. package/{es → types}/index.d.ts +1 -0
  47. package/types/index.d.ts.map +1 -0
  48. package/{es → types}/src/argo-log.d.ts +1 -0
  49. package/types/src/argo-log.d.ts.map +1 -0
  50. package/types/src/date-transfer.d.ts +12 -0
  51. package/types/src/date-transfer.d.ts.map +1 -0
  52. package/types/src/device.d.ts +18 -0
  53. package/types/src/device.d.ts.map +1 -0
  54. package/{es → types}/src/file-operations.d.ts +1 -0
  55. package/types/src/file-operations.d.ts.map +1 -0
  56. package/{lib → types}/src/json.d.ts +1 -0
  57. package/types/src/json.d.ts.map +1 -0
  58. package/{es → types}/src/oss-uploader.d.ts +2 -2
  59. package/types/src/oss-uploader.d.ts.map +1 -0
  60. package/{es → types}/src/storage.d.ts +1 -0
  61. package/types/src/storage.d.ts.map +1 -0
  62. package/{lib → types}/src/types.d.ts +1 -0
  63. package/types/src/types.d.ts.map +1 -0
  64. package/{lib → types}/src/use-api.d.ts +3 -4
  65. package/types/src/use-api.d.ts.map +1 -0
  66. package/{es → types}/src/watermark.d.ts +1 -0
  67. package/types/src/watermark.d.ts.map +1 -0
  68. package/types/tsconfig.tsbuildinfo +1 -0
  69. package/README.md +0 -65
  70. package/es/_virtual/_commonjs-dynamic-modules.mjs +0 -7
  71. package/es/_virtual/_commonjs-dynamic-modules.mjs.map +0 -1
  72. package/es/_virtual/_commonjsHelpers.mjs +0 -7
  73. package/es/_virtual/_commonjsHelpers.mjs.map +0 -1
  74. package/es/_virtual/ali-oss/dist/aliyun-oss-sdk.mjs +0 -20195
  75. package/es/_virtual/ali-oss/dist/aliyun-oss-sdk.mjs.map +0 -1
  76. package/es/_virtual/aliyun-oss-sdk.mjs +0 -8
  77. package/es/_virtual/aliyun-oss-sdk.mjs.map +0 -1
  78. package/es/_virtual/aliyun-oss-sdk2.mjs +0 -5
  79. package/es/_virtual/aliyun-oss-sdk2.mjs.map +0 -1
  80. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs +0 -2142
  81. package/es/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.mjs.map +0 -1
  82. package/es/_virtual/xlsx/xlsx.mjs +0 -24583
  83. package/es/_virtual/xlsx/xlsx.mjs.map +0 -1
  84. package/es/index.mjs +0 -35
  85. package/es/index.mjs.map +0 -1
  86. package/es/src/argo-log.mjs +0 -68
  87. package/es/src/argo-log.mjs.map +0 -1
  88. package/es/src/date-transfer.d.ts +0 -20
  89. package/es/src/date-transfer.mjs +0 -62
  90. package/es/src/date-transfer.mjs.map +0 -1
  91. package/es/src/device.d.ts +0 -4
  92. package/es/src/device.mjs +0 -24
  93. package/es/src/device.mjs.map +0 -1
  94. package/es/src/file-operations.mjs +0 -79
  95. package/es/src/file-operations.mjs.map +0 -1
  96. package/es/src/json.d.ts +0 -15
  97. package/es/src/json.mjs +0 -45
  98. package/es/src/json.mjs.map +0 -1
  99. package/es/src/oss-uploader.mjs +0 -89
  100. package/es/src/oss-uploader.mjs.map +0 -1
  101. package/es/src/storage.mjs +0 -81
  102. package/es/src/storage.mjs.map +0 -1
  103. package/es/src/types.d.ts +0 -26
  104. package/es/src/types.mjs +0 -37
  105. package/es/src/types.mjs.map +0 -1
  106. package/es/src/use-api.d.ts +0 -47
  107. package/es/src/use-api.mjs +0 -44
  108. package/es/src/use-api.mjs.map +0 -1
  109. package/es/src/watermark.mjs +0 -147
  110. package/es/src/watermark.mjs.map +0 -1
  111. package/lib/_virtual/_commonjs-dynamic-modules.js +0 -2
  112. package/lib/_virtual/_commonjs-dynamic-modules.js.map +0 -1
  113. package/lib/_virtual/_commonjsHelpers.js +0 -2
  114. package/lib/_virtual/_commonjsHelpers.js.map +0 -1
  115. package/lib/_virtual/ali-oss/dist/aliyun-oss-sdk.js +0 -85
  116. package/lib/_virtual/ali-oss/dist/aliyun-oss-sdk.js.map +0 -1
  117. package/lib/_virtual/aliyun-oss-sdk.js +0 -2
  118. package/lib/_virtual/aliyun-oss-sdk.js.map +0 -1
  119. package/lib/_virtual/aliyun-oss-sdk2.js +0 -2
  120. package/lib/_virtual/aliyun-oss-sdk2.js.map +0 -1
  121. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js +0 -30
  122. package/lib/_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js.map +0 -1
  123. package/lib/_virtual/xlsx/xlsx.js +0 -105
  124. package/lib/_virtual/xlsx/xlsx.js.map +0 -1
  125. package/lib/index.d.ts +0 -10
  126. package/lib/src/argo-log.d.ts +0 -32
  127. package/lib/src/date-transfer.d.ts +0 -20
  128. package/lib/src/device.d.ts +0 -4
  129. package/lib/src/file-operations.d.ts +0 -42
  130. package/lib/src/oss-uploader.d.ts +0 -43
  131. package/lib/src/storage.d.ts +0 -26
  132. package/lib/src/watermark.d.ts +0 -47
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sources":["../../../../packages/utils/src/storage.ts"],"sourcesContent":["// 使用单例模式\nclass Storage {\n private readonly prefix: string\n\n constructor(prefix = 'qxs_') {\n this.prefix = prefix\n }\n\n local = {\n has: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n return Object.prototype.hasOwnProperty.call(localStorage, prefixedKey)\n },\n get: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n return localStorage.getItem(prefixedKey)\n },\n set: (key: string, value: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n localStorage.setItem(prefixedKey, value)\n },\n remove: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n localStorage.removeItem(prefixedKey)\n },\n clear: () => {\n localStorage.clear()\n },\n }\n\n session = {\n has: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n return Object.prototype.hasOwnProperty.call(sessionStorage, prefixedKey)\n },\n get: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n return sessionStorage.getItem(prefixedKey)\n },\n set: (key: string, value: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n sessionStorage.setItem(prefixedKey, value)\n },\n remove: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n sessionStorage.removeItem(prefixedKey)\n },\n clear: () => {\n sessionStorage.clear()\n },\n }\n\n cookie = {\n has: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n return new RegExp(`(^|;)\\\\s*${prefixedKey}=`).test(document.cookie)\n },\n get: (key: string, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n const match = document.cookie.match(new RegExp(`(^|;)\\\\s*${prefixedKey}=([^;]*)`))\n return match ? decodeURIComponent(match[2]) : null\n },\n set: (key: string, value: string, expires = 1, path = '/', domain = window.location.hostname, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n const expiresDate = new Date()\n expiresDate.setTime(expiresDate.getTime() + expires * 24 * 60 * 60 * 1000)\n const expiresStr = `;expires=${expiresDate.toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${prefixedKey}=${encodeURIComponent(value)}${expiresStr}${pathStr}${domainStr}`\n },\n remove: (key: string, path = '/', domain = window.location.hostname, usePrefix: boolean = true) => {\n const prefixedKey = usePrefix ? `${this.prefix}${key}` : key\n const expiresStr = `;expires=${new Date(0).toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${prefixedKey}=;${expiresStr}${pathStr}${domainStr}`\n },\n clear: () => {\n const keys = document.cookie.match(/[^ =;]+(?==)/g)\n if (keys) {\n keys.forEach((key) => {\n document.cookie = `${key}=;expires=${new Date(0).toUTCString()};path=/`\n })\n }\n },\n }\n}\n\n// 直接导出 Storage 类\nexport { Storage }\n"],"names":["Storage","constructor","_this","prefix","__publicField","has","key","usePrefix","arguments","length","undefined","prefixedKey","Object","prototype","hasOwnProperty","call","localStorage","get","getItem","set","value","setItem","remove","removeItem","clear","sessionStorage","RegExp","test","document","cookie","match","decodeURIComponent","expires","path","domain","window","location","hostname","expiresDate","Date","setTime","getTime","expiresStr","toUTCString","pathStr","domainStr","encodeURIComponent","keys","forEach"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ const isUndefined = val => val === void 0;
2
+ const isBoolean = val => typeof val === "boolean";
3
+ const isNumber = val => typeof val === "number";
4
+ function isElement(e) {
5
+ if (typeof Element === "undefined") {
6
+ return false;
7
+ }
8
+ return e instanceof Element;
9
+ }
10
+ function isWindow(val) {
11
+ return val === window;
12
+ }
13
+ function isJSONString(str) {
14
+ const jsonStringRegex = /^[\],:{}\s]*$/.test(str.replace(/\\["\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""));
15
+ return jsonStringRegex && isValidJSON(str);
16
+ }
17
+ function isValidJSON(str) {
18
+ try {
19
+ JSON.parse(str);
20
+ return true;
21
+ } catch (e) {
22
+ console.log("e: ", e);
23
+ return false;
24
+ }
25
+ }
26
+ function isImageByMimeType(file) {
27
+ return file.type.startsWith("image/");
28
+ }
29
+ function isPlainObject(value) {
30
+ if (value === null || typeof value !== "object") {
31
+ return false;
32
+ }
33
+ const proto = Object.getPrototypeOf(value);
34
+ return proto === null || proto === Object.prototype;
35
+ }
36
+
37
+ export { isBoolean, isElement, isImageByMimeType, isJSONString, isNumber, isPlainObject, isUndefined, isWindow };
38
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../packages/utils/src/types.ts"],"sourcesContent":["export const isUndefined = (val: any): val is undefined => val === undefined\nexport const isBoolean = (val: any): val is boolean => typeof val === 'boolean'\nexport const isNumber = (val: any): val is number => typeof val === 'number'\n\nexport function isElement(e: unknown): e is Element {\n if (typeof Element === 'undefined') {\n return false\n }\n return e instanceof Element\n}\n\nexport function isWindow(val: unknown): val is Window {\n return val === window\n}\n\n/**\n * 判断字符串是否为JSON字符串\n * @param str - 要判断的字符串\n * @returns 如果字符串是JSON字符串,则返回true,否则返回false\n */\nexport function isJSONString(str: string) {\n const jsonStringRegex = /^[\\],:{}\\s]*$/\n .test(str.replace(/\\\\[\"\\\\/bfnrtu]/g, '@')\n .replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']')\n .replace(/(?:^|:|,)(?:\\s*\\[)+/g, ''))\n\n return jsonStringRegex && isValidJSON(str)\n}\n\n/**\n * 判断字符串是否为有效的JSON字符串\n * @param str - 要判断的字符串\n * @returns 如果字符串是有效的JSON字符串,则返回true,否则返回false\n */\nfunction isValidJSON(str: string) {\n try {\n JSON.parse(str)\n return true\n }\n catch (e) {\n console.log('e: ', e)\n return false\n }\n}\n\n/**\n * 通过 MIME 类型判断文件是否为图片\n * @param file - 要检查的文件对象\n * @returns {boolean} 如果文件是图片类型返回 true,否则返回 false\n * @example\n * const file = new File([''], 'test.png', { type: 'image/png' });\n * isImageByMimeType(file); // true\n */\nexport function isImageByMimeType(file: File) {\n return file.type.startsWith('image/')\n}\n\n/**\n * 判断一个值是否为普通对象\n * @param value - 要判断的值\n * @returns 如果值是普通对象,则返回 true,否则返回 false\n */\nexport function isPlainObject(value: unknown): value is Record<string, any> {\n if (value === null || typeof value !== 'object') {\n return false\n }\n\n // 获取原型\n const proto = Object.getPrototypeOf(value)\n\n // 如果没有原型(proto === null),说明是通过 Object.create(null) 创建的\n // 或者原型就是 Object.prototype,说明是普通对象\n return proto === null || proto === Object.prototype\n}\n"],"names":["isUndefined","val","isBoolean","isNumber","isElement","e","Element","isWindow","window","isJSONString","str","jsonStringRegex","test","replace","isValidJSON","JSON","parse","console","log","isImageByMimeType","file","type","startsWith","isPlainObject","value","proto","Object","getPrototypeOf","prototype"],"mappings":"AAAa,MAAAA,WAAA,GAAeC,GAAA,IAA+BA,GAAQ,KAAA;AAC5D,MAAMC,SAAY,GAACD,GAA6B,IAAA,OAAOA,GAAQ,KAAA;AAC/D,MAAME,QAAW,GAACF,GAA4B,IAAA,OAAOA,GAAQ,KAAA;AAE7D,SAASG,UAAUC,CAA0B,EAAA;AAC9C,EAAA,IAAA,OAAOC,YAAY,WAAa,EAAA;AAC3B,IAAA,OAAA,KAAA;AACT;EACA,OAAOD,CAAa,YAAAC,OAAA;AACtB;AAEO,SAASC,SAASN,GAA6B,EAAA;EACpD,OAAOA,GAAQ,KAAAO,MAAA;AACjB;AAOO,SAASC,aAAaC,GAAa,EAAA;AACxC,EAAA,MAAMC,eAAkB,GAAA,eAAA,CACrBC,IAAK,CAAAF,GAAA,CAAIG,QAAQ,iBAAmB,EAAA,GAAG,CACrC,CAAAA,OAAA,CAAQ,oEAAoE,GAAG,CAAA,CAC/EA,OAAQ,CAAA,sBAAA,EAAwB,EAAE,CAAC,CAAA;AAEjC,EAAA,OAAAF,eAAA,IAAmBG,YAAYJ,GAAG,CAAA;AAC3C;AAOA,SAASI,YAAYJ,GAAa,EAAA;EAC5B,IAAA;AACFK,IAAAA,IAAA,CAAKC,MAAMN,GAAG,CAAA;AACP,IAAA,OAAA,IAAA;WAEFL,CAAG,EAAA;AACAY,IAAAA,OAAA,CAAAC,GAAA,CAAI,OAAOb,CAAC,CAAA;AACb,IAAA,OAAA,KAAA;AACT;AACF;AAUO,SAASc,kBAAkBC,IAAY,EAAA;AACrC,EAAA,OAAAA,IAAA,CAAKC,IAAK,CAAAC,UAAA,CAAW,QAAQ,CAAA;AACtC;AAOO,SAASC,cAAcC,KAA8C,EAAA;EAC1E,IAAIA,KAAU,KAAA,IAAA,IAAQ,OAAOA,KAAA,KAAU,QAAU,EAAA;AACxC,IAAA,OAAA,KAAA;AACT;AAGM,EAAA,MAAAC,KAAA,GAAQC,MAAO,CAAAC,cAAA,CAAeH,KAAK,CAAA;EAIlC,OAAAC,KAAA,KAAU,IAAQ,IAAAA,KAAA,KAAUC,MAAO,CAAAE,SAAA;AAC5C;;;;"}
@@ -0,0 +1,65 @@
1
+ import { isPlainObject } from './types.js';
2
+
3
+ var __defProp = Object.defineProperty;
4
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true,
8
+ value
9
+ }) : obj[key] = value;
10
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
11
+ const _ApiService = class _ApiService {
12
+ constructor(apiInstance) {
13
+ this.apiInstance = apiInstance;
14
+ __publicField(this, "useApi", async (axiosConfig, params, isWholeResponse) => {
15
+ let res = null;
16
+ let error = null;
17
+ try {
18
+ const config = {
19
+ ...axiosConfig,
20
+ ...(["GET"].includes(axiosConfig.method.toUpperCase()) ? {
21
+ params
22
+ } : {
23
+ data: params
24
+ })
25
+ };
26
+ config.url = (config.proxyPrefix || "") + axiosConfig.url;
27
+ delete config.proxyPrefix;
28
+ const response = await this.apiInstance(config);
29
+ res = isWholeResponse ? response.data : response.data.data;
30
+ } catch (err) {
31
+ if (err.name !== "AxiosError") {
32
+ if (this.isAxiosResponse(err)) {
33
+ error = err.data;
34
+ } else if (this.isErrorResponse(err)) {
35
+ error = err;
36
+ }
37
+ } else {
38
+ console.error(err);
39
+ }
40
+ }
41
+ return {
42
+ res,
43
+ error
44
+ };
45
+ });
46
+ if (_ApiService.instance) {
47
+ return _ApiService.instance;
48
+ }
49
+ _ApiService.instance = this;
50
+ }
51
+ isBusinessError(obj) {
52
+ return isPlainObject(obj) && typeof obj.message === "string" && typeof obj.code === "number" && obj.code !== 0;
53
+ }
54
+ isAxiosResponse(value) {
55
+ return isPlainObject(value) && value.data !== void 0 && this.isBusinessError(value.data) && value.status !== void 0 && value.statusText !== void 0 && value.headers !== void 0 && value.config !== void 0 && value.request !== void 0;
56
+ }
57
+ isErrorResponse(value) {
58
+ return "code" in value && "data" in value && "message" in value && value.code !== 0;
59
+ }
60
+ };
61
+ __publicField(_ApiService, "instance");
62
+ let ApiService = _ApiService;
63
+
64
+ export { ApiService };
65
+ //# sourceMappingURL=use-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-api.js","sources":["../../../../packages/utils/src/use-api.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, AxiosResponse } from 'axios'\nimport { isPlainObject } from './types'\n\nexport interface SuccessResponse<T> {\n code: number\n count: number\n data: T\n message: string\n}\n\nexport interface ErrorResponse {\n code: number\n data: null\n message: string\n}\n\nexport interface UseApiResponse<W extends boolean = false, T = unknown> {\n res: W extends true ? SuccessResponse<T> : T\n error: ErrorResponse | null\n}\n\nexport interface UrlObjectType {\n url: string\n method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'\n proxyPrefix?: string\n}\n\nexport type ApiTypeMap<U extends UrlObjectType> = {\n [K in U['url']]: {\n request: any\n response: any\n }\n}\n\ntype RequestPayload<T> = T extends { data: any } ? T['data'] : T\ntype RequestParams<T> = T extends { params: any } ? T['params'] : T\n\nexport class ApiService<\n T extends ApiTypeMap<U>,\n U extends UrlObjectType,\n> {\n private static instance: ApiService<any, any>\n\n constructor(\n private apiInstance: AxiosInstance,\n ) {\n if (ApiService.instance) {\n return ApiService.instance as ApiService<T, U>\n }\n ApiService.instance = this\n }\n\n private isBusinessError(obj: ErrorResponse): boolean {\n return isPlainObject(obj)\n && typeof obj.message === 'string'\n && typeof obj.code === 'number'\n && obj.code !== 0\n }\n\n private isAxiosResponse(value: any): value is AxiosResponse {\n return isPlainObject(value)\n && value.data !== undefined\n && this.isBusinessError(value.data)\n && value.status !== undefined\n && value.statusText !== undefined\n && value.headers !== undefined\n && value.config !== undefined\n && value.request !== undefined\n }\n\n private isErrorResponse(value: any): value is ErrorResponse {\n return 'code' in value && 'data' in value && 'message' in value && value.code !== 0\n }\n\n public useApi = async <\n K extends U,\n W extends boolean = false,\n >(\n axiosConfig: Omit<AxiosRequestConfig<RequestPayload<T[K['url']]['request']>>, 'params'> & K & {\n params?: RequestParams<T[K['url']]['request']>\n },\n params?: RequestParams<T[K['url']]['request']>,\n isWholeResponse?: W,\n ): Promise<UseApiResponse<W, T[K['url']]['response']>> => {\n let res: UseApiResponse<W, T[K['url']]['response']>['res'] | null = null\n let error: UseApiResponse['error'] = null\n\n try {\n const config = {\n ...axiosConfig,\n ...(['GET'].includes(axiosConfig.method.toUpperCase()) ? { params } : { data: params }),\n }\n\n config.url = (config.proxyPrefix || '') + axiosConfig.url\n delete config.proxyPrefix\n\n const response = await this.apiInstance<SuccessResponse<T[K['url']]['response']>>(config)\n res = isWholeResponse\n ? response.data\n : response.data.data\n }\n catch (err: any) {\n if (err.name !== 'AxiosError') {\n if (this.isAxiosResponse(err)) {\n error = err.data\n }\n else if (this.isErrorResponse(err)) {\n error = err\n }\n }\n else {\n console.error(err)\n }\n }\n\n return { res: res!, error }\n }\n}\n"],"names":["_ApiService","constructor","apiInstance","__publicField","axiosConfig","params","isWholeResponse","res","error","config","includes","method","toUpperCase","data","url","proxyPrefix","response","err","name","isAxiosResponse","isErrorResponse","console","instance","isBusinessError","obj","isPlainObject","message","code","value","status","statusText","headers","request","ApiService"],"mappings":";;;;;;;;;;AAqCO,MAAMA,WAAA,GAAN,MAAMA,WAGX,CAAA;EAGAC,YACUC,WACR,EAAA;IADQ,IAAA,CAAAA,WAAA,GAAAA,WAAA;IA8BVC,aAAA,CAAA,IAAA,EAAO,QAAS,EAAA,OAIdC,WAGA,EAAAC,MAAA,EACAC,eACwD,KAAA;MACxD,IAAIC,GAAgE,GAAA,IAAA;MACpE,IAAIC,KAAiC,GAAA,IAAA;MAEjC,IAAA;AACF,QAAA,MAAMC,MAAS,GAAA;AACb,UAAA,GAAGL,WAAA;AACH,UAAA,IAAI,CAAC,KAAK,CAAA,CAAEM,SAASN,WAAY,CAAAO,MAAA,CAAOC,WAAY,EAAC,IAAI;AAAEP,YAAAA;AAAO,WAAI,GAAA;AAAEQ,YAAAA,MAAMR;WAAO;SACvF;AAEAI,QAAAA,MAAA,CAAOK,GAAO,GAAA,CAAAL,MAAA,CAAOM,WAAe,IAAA,EAAA,IAAMX,WAAY,CAAAU,GAAA;QACtD,OAAOL,MAAO,CAAAM,WAAA;QAEd,MAAMC,QAAW,GAAA,MAAM,IAAK,CAAAd,WAAA,CAAsDO,MAAM,CAAA;QACxFF,GAAA,GAAMD,eACF,GAAAU,QAAA,CAASH,IACT,GAAAG,QAAA,CAASH,IAAK,CAAAA,IAAA;eAEbI,GAAU,EAAA;AACX,QAAA,IAAAA,GAAA,CAAIC,SAAS,YAAc,EAAA;AACzB,UAAA,IAAA,IAAA,CAAKC,eAAgB,CAAAF,GAAG,CAAG,EAAA;YAC7BT,KAAA,GAAQS,GAAI,CAAAJ,IAAA;WAEL,MAAA,IAAA,IAAA,CAAKO,eAAgB,CAAAH,GAAG,CAAG,EAAA;AAC1BT,YAAAA,KAAA,GAAAS,GAAA;AACV;AACF,SACK,MAAA;AACHI,UAAAA,OAAA,CAAQb,MAAMS,GAAG,CAAA;AACnB;AACF;MAEO,OAAA;QAAEV;AAAWC,QAAAA;OAAM;AAC5B,KAAA,CAAA;IAtEE,IAAIR,YAAWsB,QAAU,EAAA;MACvB,OAAOtB,WAAW,CAAAsB,QAAA;AACpB;IACAtB,WAAA,CAAWsB,QAAW,GAAA,IAAA;AACxB;EAEQC,gBAAgBC,GAA6B,EAAA;IACnD,OAAOC,aAAc,CAAAD,GAAG,CACnB,IAAA,OAAOA,GAAI,CAAAE,OAAA,KAAY,QACvB,IAAA,OAAOF,GAAI,CAAAG,IAAA,KAAS,QACpB,IAAAH,GAAA,CAAIG,IAAS,KAAA,CAAA;AACpB;EAEQR,gBAAgBS,KAAoC,EAAA;IACnD,OAAAH,aAAA,CAAcG,KAAK,CAAA,IACrBA,KAAM,CAAAf,IAAA,KAAS,UACf,IAAK,CAAAU,eAAA,CAAgBK,KAAM,CAAAf,IAAI,CAC/B,IAAAe,KAAA,CAAMC,WAAW,MACjB,IAAAD,KAAA,CAAME,UAAe,KAAA,MAAA,IACrBF,KAAM,CAAAG,OAAA,KAAY,UAClBH,KAAM,CAAAnB,MAAA,KAAW,MACjB,IAAAmB,KAAA,CAAMI,OAAY,KAAA,MAAA;AACzB;EAEQZ,gBAAgBQ,KAAoC,EAAA;AAC1D,IAAA,OAAO,UAAUA,KAAS,IAAA,MAAA,IAAUA,SAAS,SAAa,IAAAA,KAAA,IAASA,MAAMD,IAAS,KAAA,CAAA;AACpF;AA6CF,CAAA;AA5EExB,aAAA,CAJWH,WAII,EAAA,UAAA,CAAA;AAJV,IAAMiC,UAAN,GAAAjC;;;;"}
@@ -0,0 +1,209 @@
1
+ const initialSettings = {
2
+ id: "wm_div_id",
3
+ prefix: "mask_div_id",
4
+ text: "\u6D4B\u8BD5\u6C34\u5370",
5
+ x: 0,
6
+ y: 0,
7
+ rows: 0,
8
+ cols: 0,
9
+ width: 0,
10
+ height: 0,
11
+ x_space: 100,
12
+ y_space: 40,
13
+ font: "\u5FAE\u8F6F\u96C5\u9ED1",
14
+ color: "black",
15
+ fontsize: "18px",
16
+ alpha: 0.15,
17
+ angle: 15,
18
+ parent_width: 0,
19
+ parent_height: 0,
20
+ parent_node: null,
21
+ monitor: true
22
+ };
23
+ function calculateTextDimensions(text, font, fontSize) {
24
+ const canvas = document.createElement("canvas");
25
+ const context = canvas.getContext("2d");
26
+ if (!context) {
27
+ return {
28
+ width: 100,
29
+ height: 100
30
+ };
31
+ }
32
+ context.font = `${fontSize} ${font}`;
33
+ const metrics = context.measureText(text.trim());
34
+ const fontSizeNum = Number.parseFloat(fontSize);
35
+ const height = metrics.actualBoundingBoxAscent !== void 0 && metrics.actualBoundingBoxDescent !== void 0 ? metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent : fontSizeNum;
36
+ return {
37
+ width: Math.ceil(metrics.width),
38
+ height: Math.ceil(height)
39
+ };
40
+ }
41
+ function watermark() {
42
+ const globalSetting = {
43
+ ...initialSettings
44
+ };
45
+ let forceRemove = false;
46
+ const watermarkDom = new MutationObserver(domChangeCallback);
47
+ const resizeObserver = new ResizeObserver(() => {
48
+ if (!forceRemove) {
49
+ loadMark(globalSetting);
50
+ }
51
+ });
52
+ function calculateWatermarkLayout(pageWidth, pageHeight) {
53
+ const availableWidth = pageWidth - globalSetting.x;
54
+ const availableHeight = pageHeight - globalSetting.y;
55
+ const x_space = globalSetting.x_space || 20;
56
+ const y_space = globalSetting.y_space || 20;
57
+ const cols = Math.ceil(availableWidth / (globalSetting.width + x_space));
58
+ const rows = Math.ceil(availableHeight / (globalSetting.height + y_space));
59
+ return {
60
+ cols,
61
+ rows,
62
+ x_space,
63
+ y_space
64
+ };
65
+ }
66
+ function createWatermarkElement(x, y, index) {
67
+ const maskDiv = document.createElement("div");
68
+ maskDiv.textContent = globalSetting.text;
69
+ maskDiv.id = `${globalSetting.prefix}${index}`;
70
+ maskDiv.style.cssText = `
71
+ transform: rotate(-${globalSetting.angle}deg);
72
+ position: absolute;
73
+ left: ${x}px;
74
+ top: ${y}px;
75
+ overflow: hidden;
76
+ z-index: 9999999;
77
+ opacity: ${globalSetting.alpha};
78
+ font-size: ${globalSetting.fontsize};
79
+ font-family: ${globalSetting.font};
80
+ color: ${globalSetting.color};
81
+ text-align: center;
82
+ width: ${globalSetting.width}px;
83
+ height: ${globalSetting.height}px;
84
+ line-height: ${globalSetting.height}px;
85
+ display: flex;
86
+ align-items: center;
87
+ justify-content: center;
88
+ user-select: none;
89
+ visibility: visible;
90
+ `.replace(/\s+/g, " ").trim();
91
+ return maskDiv;
92
+ }
93
+ function loadMark(settings) {
94
+ removeMark();
95
+ Object.assign(globalSetting, settings);
96
+ if (globalSetting.width === 0 && globalSetting.height === 0 || globalSetting.width === 0 || globalSetting.height === 0) {
97
+ const textDimensions = calculateTextDimensions(globalSetting.text, globalSetting.font, globalSetting.fontsize);
98
+ const padding = 10;
99
+ if (globalSetting.width === 0) {
100
+ globalSetting.width = textDimensions.width + padding;
101
+ }
102
+ if (globalSetting.height === 0) {
103
+ globalSetting.height = textDimensions.height + padding;
104
+ }
105
+ }
106
+ const parentElement = globalSetting.parent_node || document.body;
107
+ const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth);
108
+ const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight);
109
+ const watermarkContainer = document.createElement("div");
110
+ watermarkContainer.id = globalSetting.id;
111
+ if (parentElement.closest("body") && getComputedStyle(parentElement).position === "static") {
112
+ parentElement.style.position = "relative";
113
+ }
114
+ watermarkContainer.style.cssText = `
115
+ pointer-events: none;
116
+ display: block;
117
+ position: absolute;
118
+ top: 0;
119
+ left: 0;
120
+ width: 100%;
121
+ height: 100%;
122
+ z-index: 9999999;
123
+ overflow: hidden;
124
+ `.replace(/\s+/g, " ").trim();
125
+ const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({
126
+ mode: "open"
127
+ }) : watermarkContainer;
128
+ parentElement.appendChild(watermarkContainer);
129
+ const {
130
+ cols,
131
+ rows,
132
+ x_space,
133
+ y_space
134
+ } = calculateWatermarkLayout(pageWidth, pageHeight);
135
+ globalSetting.cols = cols;
136
+ globalSetting.rows = rows;
137
+ globalSetting.x_space = x_space;
138
+ globalSetting.y_space = y_space;
139
+ const fragment = document.createDocumentFragment();
140
+ for (let i = 0; i < rows; i++) {
141
+ const y = globalSetting.y + (globalSetting.height + y_space) * i;
142
+ for (let j = 0; j < cols; j++) {
143
+ const x = globalSetting.x + (globalSetting.width + x_space) * j;
144
+ fragment.appendChild(createWatermarkElement(x, y, i * cols + j));
145
+ }
146
+ }
147
+ shadowRoot.appendChild(fragment);
148
+ if (globalSetting.monitor) {
149
+ resizeObserver.observe(parentElement);
150
+ const config = {
151
+ attributes: true,
152
+ // 监听属性变化
153
+ childList: true,
154
+ // 监听子元素变化
155
+ subtree: true,
156
+ // 监听子树变化
157
+ characterData: true
158
+ // 监听文本内容变化
159
+ };
160
+ watermarkDom.observe(watermarkContainer, config);
161
+ if (shadowRoot !== watermarkContainer) {
162
+ watermarkDom.observe(shadowRoot, config);
163
+ }
164
+ }
165
+ }
166
+ function removeMark() {
167
+ const watermarkElement = document.getElementById(globalSetting.id);
168
+ watermarkDom.disconnect();
169
+ if (watermarkElement) {
170
+ watermarkElement.parentNode?.removeChild(watermarkElement);
171
+ }
172
+ }
173
+ function domChangeCallback(records) {
174
+ if (forceRemove) {
175
+ forceRemove = false;
176
+ return;
177
+ }
178
+ const watermarkElement = document.getElementById(globalSetting.id);
179
+ if (!watermarkElement) {
180
+ loadMark(globalSetting);
181
+ return;
182
+ }
183
+ const hasChanges = records.some(record => {
184
+ if (record.type === "childList") {
185
+ return true;
186
+ }
187
+ if (record.type === "attributes") {
188
+ return true;
189
+ }
190
+ if (record.type === "characterData") {
191
+ return true;
192
+ }
193
+ return false;
194
+ });
195
+ if (hasChanges) {
196
+ loadMark(globalSetting);
197
+ }
198
+ }
199
+ return {
200
+ addMark: loadMark,
201
+ removeMark: () => {
202
+ forceRemove = true;
203
+ removeMark();
204
+ }
205
+ };
206
+ }
207
+
208
+ export { watermark };
209
+ //# sourceMappingURL=watermark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watermark.js","sources":["../../../../packages/utils/src/watermark.ts"],"sourcesContent":["interface SettingsType {\n /** 水印总体的id */\n id?: string\n /** 小水印的id前缀 */\n prefix?: string\n /** 水印文案 */\n text?: string\n /** 水印起始位置x轴坐标 */\n x?: number\n /** 水印起始位置Y轴坐标 */\n y?: number\n /** 水印行数 */\n rows?: number\n /** 水印列数 */\n cols?: number\n /** 水印x轴间隔 */\n x_space?: number\n /** 水印y轴间隔 */\n y_space?: number\n /** 水印字体 */\n font?: string\n /** 水印字体颜色 */\n color?: string\n /** 水印字体大小 */\n fontsize?: string\n /** 水印透明度,要求设置在大于等于0.005 */\n alpha?: number\n /** 水印宽度 */\n width?: number\n /** 水印长度 */\n height?: number\n /** 水印倾斜度数 */\n angle?: number\n /** 水印的总体宽度(默认值:body的scrollWidth和clientWidth的较大值) */\n parent_width?: number\n /** 水印的总体高度(默认值:body的scrollHeight和clientHeight的较大值) */\n parent_height?: number\n /** 水印插件挂载的父元素element,不输入则默认挂在body */\n parent_node?: HTMLElement | null\n /** 是否监控,true: 不可删除水印; false: 可删水印 */\n monitor?: boolean\n}\n\n// 默认配置\nconst initialSettings: Required<SettingsType> = {\n id: 'wm_div_id',\n prefix: 'mask_div_id',\n text: '测试水印',\n x: 0,\n y: 0,\n rows: 0,\n cols: 0,\n width: 0,\n height: 0,\n x_space: 100,\n y_space: 40,\n font: '微软雅黑',\n color: 'black',\n fontsize: '18px',\n alpha: 0.15,\n angle: 15,\n parent_width: 0,\n parent_height: 0,\n parent_node: null,\n monitor: true,\n}\n\nfunction calculateTextDimensions(text: string, font: string, fontSize: string): { width: number, height: number } {\n const canvas = document.createElement('canvas')\n const context = canvas.getContext('2d')\n if (!context) {\n return { width: 100, height: 100 }\n }\n\n context.font = `${fontSize} ${font}`\n const metrics = context.measureText(text.trim())\n const fontSizeNum = Number.parseFloat(fontSize)\n\n // 移除 DPI 缩放,直接使用原始值\n const height = (metrics.actualBoundingBoxAscent !== undefined && metrics.actualBoundingBoxDescent !== undefined)\n ? (metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent)\n : fontSizeNum\n\n return {\n width: Math.ceil(metrics.width),\n height: Math.ceil(height),\n }\n}\n\nexport function watermark() {\n const globalSetting: Required<SettingsType> = { ...initialSettings }\n let forceRemove = false\n const watermarkDom = new MutationObserver(domChangeCallback)\n const resizeObserver = new ResizeObserver(() => {\n if (!forceRemove) {\n loadMark(globalSetting)\n }\n })\n\n // 计算水印布局\n function calculateWatermarkLayout(pageWidth: number, pageHeight: number) {\n const availableWidth = pageWidth - globalSetting.x\n const availableHeight = pageHeight - globalSetting.y\n\n // 使用固定间距\n const x_space = globalSetting.x_space || 20 // 如果未设置则使用默认值\n const y_space = globalSetting.y_space || 20 // 如果未设置则使用默认值\n\n // 计算能容纳的行数和列数\n const cols = Math.ceil(availableWidth / (globalSetting.width + x_space))\n const rows = Math.ceil(availableHeight / (globalSetting.height + y_space))\n\n return {\n cols,\n rows,\n x_space,\n y_space,\n }\n }\n\n // 创建水印元素\n function createWatermarkElement(x: number, y: number, index: number): HTMLElement {\n const maskDiv = document.createElement('div')\n maskDiv.textContent = globalSetting.text\n maskDiv.id = `${globalSetting.prefix}${index}`\n\n maskDiv.style.cssText = `\n transform: rotate(-${globalSetting.angle}deg);\n position: absolute;\n left: ${x}px;\n top: ${y}px;\n overflow: hidden;\n z-index: 9999999;\n opacity: ${globalSetting.alpha};\n font-size: ${globalSetting.fontsize};\n font-family: ${globalSetting.font};\n color: ${globalSetting.color};\n text-align: center;\n width: ${globalSetting.width}px;\n height: ${globalSetting.height}px;\n line-height: ${globalSetting.height}px;\n display: flex;\n align-items: center;\n justify-content: center;\n user-select: none;\n visibility: visible;\n `.replace(/\\s+/g, ' ').trim()\n\n return maskDiv\n }\n\n // 加载水印\n function loadMark(settings: Partial<SettingsType>) {\n removeMark()\n Object.assign(globalSetting, settings)\n\n if ((globalSetting.width === 0 && globalSetting.height === 0) || globalSetting.width === 0 || globalSetting.height === 0) {\n // 计算文本尺寸\n const textDimensions = calculateTextDimensions(\n globalSetting.text,\n globalSetting.font,\n globalSetting.fontsize,\n )\n const padding = 10\n if (globalSetting.width === 0) {\n globalSetting.width = textDimensions.width + padding\n }\n if (globalSetting.height === 0) {\n globalSetting.height = textDimensions.height + padding\n }\n }\n\n const parentElement = globalSetting.parent_node || document.body\n const pageWidth = Math.max(parentElement.scrollWidth, parentElement.clientWidth)\n const pageHeight = Math.max(parentElement.scrollHeight, parentElement.clientHeight)\n\n const watermarkContainer = document.createElement('div')\n watermarkContainer.id = globalSetting.id\n\n // 处理父元素定位\n if (parentElement.closest('body') && getComputedStyle(parentElement).position === 'static') {\n parentElement.style.position = 'relative'\n }\n\n watermarkContainer.style.cssText = `\n pointer-events: none;\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: 9999999;\n overflow: hidden;\n `.replace(/\\s+/g, ' ').trim()\n\n const shadowRoot = watermarkContainer.attachShadow ? watermarkContainer.attachShadow({ mode: 'open' }) : watermarkContainer\n\n parentElement.appendChild(watermarkContainer)\n\n const { cols, rows, x_space, y_space } = calculateWatermarkLayout(pageWidth, pageHeight)\n globalSetting.cols = cols\n globalSetting.rows = rows\n globalSetting.x_space = x_space\n globalSetting.y_space = y_space\n\n const fragment = document.createDocumentFragment()\n for (let i = 0; i < rows; i++) {\n const y = globalSetting.y + (globalSetting.height + y_space) * i\n for (let j = 0; j < cols; j++) {\n const x = globalSetting.x + (globalSetting.width + x_space) * j\n fragment.appendChild(createWatermarkElement(x, y, i * cols + j))\n }\n }\n shadowRoot.appendChild(fragment)\n\n if (globalSetting.monitor) {\n // 监听父元素大小变化\n resizeObserver.observe(parentElement)\n\n // 监听水印容器及其子元素\n const config: MutationObserverInit = {\n attributes: true, // 监听属性变化\n childList: true, // 监听子元素变化\n subtree: true, // 监听子树变化\n characterData: true, // 监听文本内容变化\n }\n\n // 监听水印容器\n watermarkDom.observe(watermarkContainer, config)\n\n // 如果使用了 Shadow DOM,还需要监听 shadowRoot 内的元素\n if (shadowRoot !== watermarkContainer) {\n watermarkDom.observe(shadowRoot, config)\n }\n }\n }\n\n // 移除水印\n function removeMark() {\n const watermarkElement = document.getElementById(globalSetting.id)\n watermarkDom.disconnect()\n if (watermarkElement) {\n watermarkElement.parentNode?.removeChild(watermarkElement)\n }\n }\n\n // 监听DOM变化\n function domChangeCallback(records: MutationRecord[]) {\n if (forceRemove) {\n forceRemove = false\n return\n }\n\n const watermarkElement = document.getElementById(globalSetting.id)\n if (!watermarkElement) {\n // 如果水印容器被删除,重新创建\n loadMark(globalSetting)\n return\n }\n\n // 检查是否有任何修改\n const hasChanges = records.some((record) => {\n // 检查元素是否被删除或添加\n if (record.type === 'childList') {\n return true\n }\n\n // 检查属性是否被修改\n if (record.type === 'attributes') {\n return true\n }\n\n // 检查文本内容是否被修改\n if (record.type === 'characterData') {\n return true\n }\n\n return false\n })\n\n if (hasChanges) {\n loadMark(globalSetting)\n }\n }\n\n return {\n addMark: loadMark,\n removeMark: () => {\n forceRemove = true\n // 删除这行,不重置全局配置\n // Object.assign(globalSetting, initialSettings)\n removeMark()\n },\n }\n}\n"],"names":["initialSettings","id","prefix","text","x","y","rows","cols","width","height","x_space","y_space","font","color","fontsize","alpha","angle","parent_width","parent_height","parent_node","monitor","calculateTextDimensions","fontSize","canvas","document","createElement","context","getContext","metrics","measureText","trim","fontSizeNum","Number","parseFloat","actualBoundingBoxAscent","actualBoundingBoxDescent","Math","ceil","watermark","globalSetting","forceRemove","watermarkDom","MutationObserver","domChangeCallback","resizeObserver","ResizeObserver","loadMark","calculateWatermarkLayout","pageWidth","pageHeight","availableWidth","availableHeight","createWatermarkElement","index","maskDiv","textContent","style","cssText","replace","settings","removeMark","Object","assign","textDimensions","padding","parentElement","body","max","scrollWidth","clientWidth","scrollHeight","clientHeight","watermarkContainer","closest","getComputedStyle","position","shadowRoot","attachShadow","mode","appendChild","fragment","createDocumentFragment","i","j","observe","config","attributes","childList","subtree","characterData","watermarkElement","getElementById","disconnect","parentNode","removeChild","records","hasChanges","some","record","type","addMark"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -1,2 +1,41 @@
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;
1
+ 'use strict';
2
+
3
+ var argoLog = require('./src/argo-log.js');
4
+ var dateTransfer = require('./src/date-transfer.js');
5
+ var device = require('./src/device.js');
6
+ var fileOperations = require('./src/file-operations.js');
7
+ var json = require('./src/json.js');
8
+ var ossUploader = require('./src/oss-uploader.js');
9
+ var storage = require('./src/storage.js');
10
+ var types = require('./src/types.js');
11
+ var useApi = require('./src/use-api.js');
12
+ var watermark = require('./src/watermark.js');
13
+
14
+
15
+
16
+ exports.ArgoLog = argoLog.ArgoLog;
17
+ exports.formatDuration = dateTransfer.formatDuration;
18
+ exports.getDeviceType = device.getDeviceType;
19
+ exports.isAndroid = device.isAndroid;
20
+ exports.isIOS = device.isIOS;
21
+ exports.isMobile = device.isMobile;
22
+ exports.createVideoUploader = fileOperations.createVideoUploader;
23
+ exports.downloadFile = fileOperations.downloadFile;
24
+ exports.JsonToExcel = json.JsonToExcel;
25
+ exports.excelToJson = json.excelToJson;
26
+ exports.OssError = ossUploader.OssError;
27
+ exports.OssUploader = ossUploader.OssUploader;
28
+ exports.generateSignedUrl = ossUploader.generateSignedUrl;
29
+ exports.uploadFile = ossUploader.uploadFile;
30
+ exports.Storage = storage.Storage;
31
+ exports.isBoolean = types.isBoolean;
32
+ exports.isElement = types.isElement;
33
+ exports.isImageByMimeType = types.isImageByMimeType;
34
+ exports.isJSONString = types.isJSONString;
35
+ exports.isNumber = types.isNumber;
36
+ exports.isPlainObject = types.isPlainObject;
37
+ exports.isUndefined = types.isUndefined;
38
+ exports.isWindow = types.isWindow;
39
+ exports.ApiService = useApi.ApiService;
40
+ exports.watermark = watermark.watermark;
2
41
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,80 @@
1
- "use strict";var c=Object.defineProperty;var l=(s,r,e)=>r in s?c(s,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[r]=e;var t=(s,r,e)=>l(s,typeof r!="symbol"?r+"":r,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=class n{constructor(r){t(this,"AnalysysAgent",null);t(this,"track",(r,e)=>{try{if(!this.AnalysysAgent){console.warn("[ArgoLog] SDK 未初始化");return}if(!r){console.warn("[ArgoLog] track: name is required");return}this.AnalysysAgent.track(r,e)}catch(o){console.warn("[ArgoLog] track failed:",o)}});t(this,"setProfile",r=>{try{if(!r){console.warn("[ArgoLog] setProfile: info is required");return}this.AnalysysAgent.profileSet(r)}catch(e){console.warn("[ArgoLog] setProfile failed:",e)}});t(this,"setAlias",r=>{try{if(!r){console.warn("[ArgoLog] setAlias: code is required");return}this.AnalysysAgent.alias(r)}catch(e){console.warn("[ArgoLog] setAlias failed:",e)}});try{if(typeof window>"u")return console.warn("[ArgoLog] 仅支持浏览器环境"),this;const e=JSON.stringify(r),o=n.instances.get(e);if(o)return o;if(!r)return console.error("envConfig is required"),this;Promise.resolve().then(()=>require("../_virtual/ans-javascript-sdk/sdk/AnalysysAgent_JS_SDK.es6.min.js")).then(i=>{this.AnalysysAgent=i.default,this.AnalysysAgent.init(r),n.instances.set(e,this)}).catch(i=>{console.warn("[ArgoLog] SDK 加载失败:",i)})}catch(e){console.warn("[ArgoLog] Init failed:",e)}return this}};t(n,"instances",new Map);let a=n;exports.ArgoLog=a;
1
+ 'use strict';
2
+
3
+ var AnsJavascriptSdk = require('ans-javascript-sdk');
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value
11
+ }) : obj[key] = value;
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+ const _ArgoLog = class _ArgoLog {
14
+ constructor(envConfig) {
15
+ __publicField(this, "AnalysysAgent", null);
16
+ __publicField(this, "track", (name, opt) => {
17
+ try {
18
+ if (!this.AnalysysAgent) {
19
+ console.warn("[ArgoLog] SDK \u672A\u521D\u59CB\u5316");
20
+ return;
21
+ }
22
+ if (!name) {
23
+ console.warn("[ArgoLog] track: name is required");
24
+ return;
25
+ }
26
+ this.AnalysysAgent.track(name, opt);
27
+ } catch (error) {
28
+ console.warn("[ArgoLog] track failed:", error);
29
+ }
30
+ });
31
+ __publicField(this, "setProfile", info => {
32
+ try {
33
+ if (!info) {
34
+ console.warn("[ArgoLog] setProfile: info is required");
35
+ return;
36
+ }
37
+ this.AnalysysAgent.profileSet(info);
38
+ } catch (error) {
39
+ console.warn("[ArgoLog] setProfile failed:", error);
40
+ }
41
+ });
42
+ __publicField(this, "setAlias", code => {
43
+ try {
44
+ if (!code) {
45
+ console.warn("[ArgoLog] setAlias: code is required");
46
+ return;
47
+ }
48
+ this.AnalysysAgent.alias(code);
49
+ } catch (error) {
50
+ console.warn("[ArgoLog] setAlias failed:", error);
51
+ }
52
+ });
53
+ try {
54
+ if (typeof window === "undefined") {
55
+ console.warn("[ArgoLog] \u4EC5\u652F\u6301\u6D4F\u89C8\u5668\u73AF\u5883");
56
+ return this;
57
+ }
58
+ const configKey = JSON.stringify(envConfig);
59
+ const existingInstance = _ArgoLog.instances.get(configKey);
60
+ if (existingInstance) {
61
+ return existingInstance;
62
+ }
63
+ if (!envConfig) {
64
+ console.error("envConfig is required");
65
+ return this;
66
+ }
67
+ this.AnalysysAgent = AnsJavascriptSdk;
68
+ this.AnalysysAgent.init(envConfig);
69
+ _ArgoLog.instances.set(configKey, this);
70
+ } catch (error) {
71
+ console.warn("[ArgoLog] Init failed:", error);
72
+ }
73
+ return this;
74
+ }
75
+ };
76
+ __publicField(_ArgoLog, "instances", /* @__PURE__ */new Map());
77
+ let ArgoLog = _ArgoLog;
78
+
79
+ exports.ArgoLog = ArgoLog;
2
80
  //# sourceMappingURL=argo-log.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"argo-log.js","sources":["../../../../packages/utils/src/argo-log.ts"],"sourcesContent":["// 定义配置项的类型别名\nexport interface EnvironmentConfig {\n encryptType?: number\n debugMode?: number\n appkey: string\n uploadURL: string\n autoProfile?: boolean\n autoTrack?: boolean\n}\n\n/**\n * ArgoLog 类 - 用于处理埋点统计的工具类\n *\n * @class ArgoLog\n * @description 基于 AnalysysAgent SDK 封装的埋点工具类,提供了埋点追踪、用户画像设置和用户别名设置等功能\n * @example\n * ```typescript\n * const argoLog = new ArgoLog({\n * appkey: 'your-app-key',\n * uploadURL: 'your-upload-url'\n * });\n *\n * // 追踪事件\n * argoLog.track('event_name', { key: 'value' });\n * ```\n */\nexport class ArgoLog<T = EnvironmentConfig> {\n private static instances = new Map<string, ArgoLog<any>>()\n private AnalysysAgent: any | null = null\n\n constructor(envConfig: T) {\n try {\n // 检查是否为浏览器环境\n if (typeof window === 'undefined') {\n console.warn('[ArgoLog] 仅支持浏览器环境')\n return this\n }\n\n const configKey = JSON.stringify(envConfig)\n const existingInstance = ArgoLog.instances.get(configKey)\n\n if (existingInstance) {\n return existingInstance\n }\n\n if (!envConfig) {\n console.error('envConfig is required')\n return this\n }\n\n // 动态导入 SDK\n import('ans-javascript-sdk').then((module) => {\n this.AnalysysAgent = module.default\n this.AnalysysAgent.init(envConfig)\n ArgoLog.instances.set(configKey, this)\n }).catch((error) => {\n console.warn('[ArgoLog] SDK 加载失败:', error)\n })\n }\n catch (error) {\n console.warn('[ArgoLog] Init failed:', error)\n }\n\n return this\n }\n\n track = (name: string, opt?: Record<string, any>): void => {\n try {\n if (!this.AnalysysAgent) {\n console.warn('[ArgoLog] SDK 未初始化')\n return\n }\n if (!name) {\n console.warn('[ArgoLog] track: name is required')\n return\n }\n this.AnalysysAgent.track(name, opt)\n }\n catch (error) {\n console.warn('[ArgoLog] track failed:', error)\n }\n }\n\n setProfile = (info: Record<string, any>): void => {\n try {\n if (!info) {\n console.warn('[ArgoLog] setProfile: info is required')\n return\n }\n this.AnalysysAgent.profileSet(info)\n }\n catch (error) {\n console.warn('[ArgoLog] setProfile failed:', error)\n }\n }\n\n setAlias = (code: string): void => {\n try {\n if (!code) {\n console.warn('[ArgoLog] setAlias: code is required')\n return\n }\n this.AnalysysAgent.alias(code)\n }\n catch (error) {\n console.warn('[ArgoLog] setAlias failed:', error)\n }\n }\n}\n"],"names":["_ArgoLog","envConfig","__publicField","name","opt","error","info","code","configKey","existingInstance","module","ArgoLog"],"mappings":"oPA0BO,MAAMA,EAAN,MAAMA,CAA+B,CAI1C,YAAYC,EAAc,CAFlBC,EAAA,qBAA4B,MAsCpCA,EAAA,aAAQ,CAACC,EAAcC,IAAoC,CACrD,GAAA,CACE,GAAA,CAAC,KAAK,cAAe,CACvB,QAAQ,KAAK,oBAAoB,EACjC,MAAA,CAEF,GAAI,CAACD,EAAM,CACT,QAAQ,KAAK,mCAAmC,EAChD,MAAA,CAEG,KAAA,cAAc,MAAMA,EAAMC,CAAG,QAE7BC,EAAO,CACJ,QAAA,KAAK,0BAA2BA,CAAK,CAAA,CAEjD,GAEAH,EAAA,kBAAcI,GAAoC,CAC5C,GAAA,CACF,GAAI,CAACA,EAAM,CACT,QAAQ,KAAK,wCAAwC,EACrD,MAAA,CAEG,KAAA,cAAc,WAAWA,CAAI,QAE7BD,EAAO,CACJ,QAAA,KAAK,+BAAgCA,CAAK,CAAA,CAEtD,GAEAH,EAAA,gBAAYK,GAAuB,CAC7B,GAAA,CACF,GAAI,CAACA,EAAM,CACT,QAAQ,KAAK,sCAAsC,EACnD,MAAA,CAEG,KAAA,cAAc,MAAMA,CAAI,QAExBF,EAAO,CACJ,QAAA,KAAK,6BAA8BA,CAAK,CAAA,CAEpD,GA5EM,GAAA,CAEE,GAAA,OAAO,OAAW,IACpB,eAAQ,KAAK,oBAAoB,EAC1B,KAGH,MAAAG,EAAY,KAAK,UAAUP,CAAS,EACpCQ,EAAmBT,EAAQ,UAAU,IAAIQ,CAAS,EAExD,GAAIC,EACK,OAAAA,EAGT,GAAI,CAACR,EACH,eAAQ,MAAM,uBAAuB,EAC9B,KAIT,QAAA,QAAA,EAAA,KAAA,IAAA,QAAO,oEAAoB,CAAA,EAAE,KAAMS,GAAW,CAC5C,KAAK,cAAgBA,EAAO,QACvB,KAAA,cAAc,KAAKT,CAAS,EACzBD,EAAA,UAAU,IAAIQ,EAAW,IAAI,CAAA,CACtC,EAAE,MAAOH,GAAU,CACV,QAAA,KAAK,sBAAuBA,CAAK,CAAA,CAC1C,QAEIA,EAAO,CACJ,QAAA,KAAK,yBAA0BA,CAAK,CAAA,CAGvC,OAAA,IAAA,CA6CX,EAjFEH,EADWF,EACI,YAAY,IAAI,KAD1B,IAAMW,EAANX"}
1
+ {"version":3,"file":"argo-log.js","sources":["../../../../packages/utils/src/argo-log.ts"],"sourcesContent":["import AnsJavascriptSdk from 'ans-javascript-sdk'\n// 定义配置项的类型别名\nexport interface EnvironmentConfig {\n encryptType?: number\n debugMode?: number\n appkey: string\n uploadURL: string\n autoProfile?: boolean\n autoTrack?: boolean\n}\n\n/**\n * ArgoLog 类 - 用于处理埋点统计的工具类\n *\n * @class ArgoLog\n * @description 基于 AnalysysAgent SDK 封装的埋点工具类,提供了埋点追踪、用户画像设置和用户别名设置等功能\n * @example\n * ```typescript\n * const argoLog = new ArgoLog({\n * appkey: 'your-app-key',\n * uploadURL: 'your-upload-url'\n * });\n *\n * // 追踪事件\n * argoLog.track('event_name', { key: 'value' });\n * ```\n */\nexport class ArgoLog<T = EnvironmentConfig> {\n private static instances = new Map<string, ArgoLog<any>>()\n private AnalysysAgent: any | null = null\n\n constructor(envConfig: T) {\n try {\n // 检查是否为浏览器环境\n if (typeof window === 'undefined') {\n console.warn('[ArgoLog] 仅支持浏览器环境')\n return this\n }\n\n const configKey = JSON.stringify(envConfig)\n const existingInstance = ArgoLog.instances.get(configKey)\n\n if (existingInstance) {\n return existingInstance\n }\n\n if (!envConfig) {\n console.error('envConfig is required')\n return this\n }\n\n // 动态导入 SDK\n this.AnalysysAgent = AnsJavascriptSdk\n this.AnalysysAgent.init(envConfig)\n ArgoLog.instances.set(configKey, this)\n }\n catch (error) {\n console.warn('[ArgoLog] Init failed:', error)\n }\n\n return this\n }\n\n track = (name: string, opt?: Record<string, any>): void => {\n try {\n if (!this.AnalysysAgent) {\n console.warn('[ArgoLog] SDK 未初始化')\n return\n }\n if (!name) {\n console.warn('[ArgoLog] track: name is required')\n return\n }\n this.AnalysysAgent.track(name, opt)\n }\n catch (error) {\n console.warn('[ArgoLog] track failed:', error)\n }\n }\n\n setProfile = (info: Record<string, any>): void => {\n try {\n if (!info) {\n console.warn('[ArgoLog] setProfile: info is required')\n return\n }\n this.AnalysysAgent.profileSet(info)\n }\n catch (error) {\n console.warn('[ArgoLog] setProfile failed:', error)\n }\n }\n\n setAlias = (code: string): void => {\n try {\n if (!code) {\n console.warn('[ArgoLog] setAlias: code is required')\n return\n }\n this.AnalysysAgent.alias(code)\n }\n catch (error) {\n console.warn('[ArgoLog] setAlias failed:', error)\n }\n }\n}\n"],"names":["_ArgoLog","constructor","envConfig","__publicField","name","opt","AnalysysAgent","console","warn","track","error","info","profileSet","code","alias","window","configKey","JSON","stringify","existingInstance","instances","get","AnsJavascriptSdk","init","set","Map","ArgoLog"],"mappings":";;;;;;;;;;;;AA2BO,MAAMA,QAAA,GAAN,MAAMA,QAA+B,CAAA;EAI1CC,YAAYC,SAAc,EAAA;AAF1BC,IAAAA,aAAA,CAAA,IAAA,EAAQ,eAA4B,EAAA,IAAA,CAAA;IAkC5BA,aAAA,CAAA,IAAA,EAAA,OAAA,EAAA,CAACC,MAAcC,GAAoC,KAAA;MACrD,IAAA;AACE,QAAA,IAAA,CAAC,KAAKC,aAAe,EAAA;AACvBC,UAAAA,OAAA,CAAQC,KAAK,wCAAoB,CAAA;AACjC,UAAA;AACF;QACA,IAAI,CAACJ,IAAM,EAAA;AACTG,UAAAA,OAAA,CAAQC,KAAK,mCAAmC,CAAA;AAChD,UAAA;AACF;QACK,IAAA,CAAAF,aAAA,CAAcG,KAAM,CAAAL,IAAA,EAAMC,GAAG,CAAA;eAE7BK,KAAO,EAAA;AACJH,QAAAA,OAAA,CAAAC,IAAA,CAAK,2BAA2BE,KAAK,CAAA;AAC/C;AACF,KAAA,CAAA;AAEAP,IAAAA,aAAA,CAAA,IAAA,EAAA,YAAA,EAAcQ,IAAoC,IAAA;MAC5C,IAAA;QACF,IAAI,CAACA,IAAM,EAAA;AACTJ,UAAAA,OAAA,CAAQC,KAAK,wCAAwC,CAAA;AACrD,UAAA;AACF;AACK,QAAA,IAAA,CAAAF,aAAA,CAAcM,WAAWD,IAAI,CAAA;eAE7BD,KAAO,EAAA;AACJH,QAAAA,OAAA,CAAAC,IAAA,CAAK,gCAAgCE,KAAK,CAAA;AACpD;AACF,KAAA,CAAA;AAEAP,IAAAA,aAAA,CAAA,IAAA,EAAA,UAAA,EAAYU,IAAuB,IAAA;MAC7B,IAAA;QACF,IAAI,CAACA,IAAM,EAAA;AACTN,UAAAA,OAAA,CAAQC,KAAK,sCAAsC,CAAA;AACnD,UAAA;AACF;AACK,QAAA,IAAA,CAAAF,aAAA,CAAcQ,MAAMD,IAAI,CAAA;eAExBH,KAAO,EAAA;AACJH,QAAAA,OAAA,CAAAC,IAAA,CAAK,8BAA8BE,KAAK,CAAA;AAClD;AACF,KAAA,CAAA;IAxEM,IAAA;AAEE,MAAA,IAAA,OAAOK,WAAW,WAAa,EAAA;AACjCR,QAAAA,OAAA,CAAQC,KAAK,4DAAoB,CAAA;AAC1B,QAAA,OAAA,IAAA;AACT;AAEM,MAAA,MAAAQ,SAAA,GAAYC,IAAK,CAAAC,SAAA,CAAUhB,SAAS,CAAA;MAC1C,MAAMiB,gBAAmB,GAAAnB,QAAA,CAAQoB,SAAU,CAAAC,GAAA,CAAIL,SAAS,CAAA;AAExD,MAAA,IAAIG,gBAAkB,EAAA;AACb,QAAA,OAAAA,gBAAA;AACT;MAEA,IAAI,CAACjB,SAAW,EAAA;AACdK,QAAAA,OAAA,CAAQG,MAAM,uBAAuB,CAAA;AAC9B,QAAA,OAAA,IAAA;AACT;MAGA,IAAA,CAAKJ,aAAgB,GAAAgB,gBAAA;AAChB,MAAA,IAAA,CAAAhB,aAAA,CAAciB,KAAKrB,SAAS,CAAA;MACzBF,QAAA,CAAAoB,SAAA,CAAUI,GAAI,CAAAR,SAAA,EAAW,IAAI,CAAA;aAEhCN,KAAO,EAAA;AACJH,MAAAA,OAAA,CAAAC,IAAA,CAAK,0BAA0BE,KAAK,CAAA;AAC9C;AAEO,IAAA,OAAA,IAAA;AACT;AA4CF,CAAA;AA7EEP,aADW,CAAAH,QAAA,EACI,WAAY,iBAAA,IAAIyB,GAA0B,EAAA,CAAA;AADpD,IAAMC,OAAN,GAAA1B;;;;"}
@@ -1,2 +1,36 @@
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;
1
+ 'use strict';
2
+
3
+ function formatDuration(ms) {
4
+ const seconds = Math.floor(ms / 1e3);
5
+ const minutes = Math.floor(seconds / 60);
6
+ const hours = Math.floor(minutes / 60);
7
+ const days = Math.floor(hours / 24);
8
+ const pad = num => num.toString().padStart(2, "0");
9
+ if (hours < 1) {
10
+ const mm = pad(minutes % 60);
11
+ const ss = pad(seconds % 60);
12
+ return `${mm}:${ss}`;
13
+ }
14
+ if (days < 1) {
15
+ const hh = pad(hours);
16
+ const mm = pad(minutes % 60);
17
+ const ss = pad(seconds % 60);
18
+ return `${hh}:${mm}:${ss}`;
19
+ }
20
+ const remainingHours = hours % 24;
21
+ const remainingMinutes = minutes % 60;
22
+ const parts = [];
23
+ if (days > 0) {
24
+ parts.push(`${days}\u5929`);
25
+ }
26
+ if (remainingHours > 0) {
27
+ parts.push(`${remainingHours}\u5C0F\u65F6`);
28
+ }
29
+ if (remainingMinutes > 0) {
30
+ parts.push(`${remainingMinutes}\u5206\u949F`);
31
+ }
32
+ return parts.join("");
33
+ }
34
+
35
+ exports.formatDuration = formatDuration;
2
36
  //# sourceMappingURL=date-transfer.js.map