@qxs-bns/utils 0.0.12 → 0.0.14

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
@@ -2,7 +2,8 @@ export * from './src/argo-log';
2
2
  export * from './src/device';
3
3
  export * from './src/file-operations';
4
4
  export * from './src/json';
5
- export { generateSignedUrl, type OssClientConfig, type OssConfig, type OssCredentials, OssUploader, uploadFile, } from './src/oss-uploader';
5
+ export * from './src/oss-uploader';
6
6
  export * from './src/storage';
7
7
  export * from './src/types';
8
+ export * from './src/use-api';
8
9
  export * from './src/watermark';
package/es/index.mjs CHANGED
@@ -1,30 +1,33 @@
1
1
  import { ArgoLog as r } from "./src/argo-log.mjs";
2
2
  import { isMobile as t } from "./src/device.mjs";
3
- import { createVideoUploader as s, downloadFile as a } from "./src/file-operations.mjs";
4
- import { JsonToExcel as n, excelToJson as p } from "./src/json.mjs";
5
- import { OssUploader as x, generateSignedUrl as f, uploadFile as g } from "./src/oss-uploader.mjs";
6
- import { initStorage as U, useStorage as c } from "./src/storage.mjs";
7
- import { isBoolean as w, isElement as J, isImageByMimeType as T, isJSONString as b, isNumber as y, isUndefined as B, isWindow as E } from "./src/types.mjs";
8
- import { watermark as M } from "./src/watermark.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";
9
10
  export {
11
+ F as ApiService,
10
12
  r as ArgoLog,
11
- n as JsonToExcel,
12
- x as OssUploader,
13
- s as createVideoUploader,
14
- a as downloadFile,
15
- p as excelToJson,
16
- f as generateSignedUrl,
17
- U as initStorage,
18
- w as isBoolean,
19
- J as isElement,
20
- T as isImageByMimeType,
21
- b as isJSONString,
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,
22
25
  t as isMobile,
23
- y as isNumber,
24
- B as isUndefined,
25
- E as isWindow,
26
- g as uploadFile,
27
- c as useStorage,
28
- M as watermark
26
+ T as isNumber,
27
+ u as isPlainObject,
28
+ y as isUndefined,
29
+ A as isWindow,
30
+ c as uploadFile,
31
+ N as watermark
29
32
  };
30
33
  //# 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":";;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- interface EnvironmentConfig {
1
+ export interface EnvironmentConfig {
2
2
  encryptType?: number;
3
3
  debugMode?: number;
4
4
  appkey: string;
@@ -22,12 +22,11 @@ interface EnvironmentConfig {
22
22
  * argoLog.track('event_name', { key: 'value' });
23
23
  * ```
24
24
  */
25
- export declare class ArgoLog {
25
+ export declare class ArgoLog<T = EnvironmentConfig> {
26
26
  private static instances;
27
27
  private AnalysysAgent;
28
- constructor(envConfig: EnvironmentConfig);
28
+ constructor(envConfig: T);
29
29
  track: (name: string, opt?: Record<string, any>) => void;
30
30
  setProfile: (info: Record<string, any>) => void;
31
31
  setAlias: (code: string) => void;
32
32
  }
33
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"argo-log.mjs","sources":["../../../../packages/utils/src/argo-log.ts"],"sourcesContent":["// import AnalysysAgent from 'ans-javascript-sdk'\n\n// 定义配置项的类型别名\ninterface 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 {\n private static instances = new Map<string, ArgoLog>()\n private AnalysysAgent: any | null = null\n\n constructor(envConfig: EnvironmentConfig) {\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":";;;AA4BO,MAAMA,IAAN,MAAMA,EAAQ;AAAA,EAInB,YAAYC,GAA8B;AAFlC,IAAAC,EAAA,uBAA4B;AAsCpC,IAAAA,EAAA,eAAQ,CAACC,GAAcC,MAAoC;AACrD,UAAA;AACE,YAAA,CAAC,KAAK,eAAe;AACvB,kBAAQ,KAAK,oBAAoB;AACjC;AAAA,QAAA;AAEF,YAAI,CAACD,GAAM;AACT,kBAAQ,KAAK,mCAAmC;AAChD;AAAA,QAAA;AAEG,aAAA,cAAc,MAAMA,GAAMC,CAAG;AAAA,eAE7BC,GAAO;AACJ,gBAAA,KAAK,2BAA2BA,CAAK;AAAA,MAAA;AAAA,IAEjD;AAEA,IAAAH,EAAA,oBAAa,CAACI,MAAoC;AAC5C,UAAA;AACF,YAAI,CAACA,GAAM;AACT,kBAAQ,KAAK,wCAAwC;AACrD;AAAA,QAAA;AAEG,aAAA,cAAc,WAAWA,CAAI;AAAA,eAE7BD,GAAO;AACJ,gBAAA,KAAK,gCAAgCA,CAAK;AAAA,MAAA;AAAA,IAEtD;AAEA,IAAAH,EAAA,kBAAW,CAACK,MAAuB;AAC7B,UAAA;AACF,YAAI,CAACA,GAAM;AACT,kBAAQ,KAAK,sCAAsC;AACnD;AAAA,QAAA;AAEG,aAAA,cAAc,MAAMA,CAAI;AAAA,eAExBF,GAAO;AACJ,gBAAA,KAAK,8BAA8BA,CAAK;AAAA,MAAA;AAAA,IAEpD;AA5EM,QAAA;AAEE,UAAA,OAAO,SAAW;AACpB,uBAAQ,KAAK,oBAAoB,GAC1B;AAGH,YAAAG,IAAY,KAAK,UAAUP,CAAS,GACpCQ,IAAmBT,EAAQ,UAAU,IAAIQ,CAAS;AAExD,UAAIC;AACK,eAAAA;AAGT,UAAI,CAACR;AACH,uBAAQ,MAAM,uBAAuB,GAC9B;AAIT,aAAO,qEAAoB,EAAE,KAAK,CAACS,MAAW;AAC5C,aAAK,gBAAgBA,EAAO,SACvB,KAAA,cAAc,KAAKT,CAAS,GACzBD,EAAA,UAAU,IAAIQ,GAAW,IAAI;AAAA,MAAA,CACtC,EAAE,MAAM,CAACH,MAAU;AACV,gBAAA,KAAK,uBAAuBA,CAAK;AAAA,MAAA,CAC1C;AAAA,aAEIA,GAAO;AACJ,cAAA,KAAK,0BAA0BA,CAAK;AAAA,IAAA;AAGvC,WAAA;AAAA,EAAA;AA6CX;AAjFEH,EADWF,GACI,aAAY,oBAAI,IAAqB;AAD/C,IAAMW,IAANX;"}
1
+ {"version":3,"file":"argo-log.mjs","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":";;;AA0BO,MAAMA,IAAN,MAAMA,EAA+B;AAAA,EAI1C,YAAYC,GAAc;AAFlB,IAAAC,EAAA,uBAA4B;AAsCpC,IAAAA,EAAA,eAAQ,CAACC,GAAcC,MAAoC;AACrD,UAAA;AACE,YAAA,CAAC,KAAK,eAAe;AACvB,kBAAQ,KAAK,oBAAoB;AACjC;AAAA,QAAA;AAEF,YAAI,CAACD,GAAM;AACT,kBAAQ,KAAK,mCAAmC;AAChD;AAAA,QAAA;AAEG,aAAA,cAAc,MAAMA,GAAMC,CAAG;AAAA,eAE7BC,GAAO;AACJ,gBAAA,KAAK,2BAA2BA,CAAK;AAAA,MAAA;AAAA,IAEjD;AAEA,IAAAH,EAAA,oBAAa,CAACI,MAAoC;AAC5C,UAAA;AACF,YAAI,CAACA,GAAM;AACT,kBAAQ,KAAK,wCAAwC;AACrD;AAAA,QAAA;AAEG,aAAA,cAAc,WAAWA,CAAI;AAAA,eAE7BD,GAAO;AACJ,gBAAA,KAAK,gCAAgCA,CAAK;AAAA,MAAA;AAAA,IAEtD;AAEA,IAAAH,EAAA,kBAAW,CAACK,MAAuB;AAC7B,UAAA;AACF,YAAI,CAACA,GAAM;AACT,kBAAQ,KAAK,sCAAsC;AACnD;AAAA,QAAA;AAEG,aAAA,cAAc,MAAMA,CAAI;AAAA,eAExBF,GAAO;AACJ,gBAAA,KAAK,8BAA8BA,CAAK;AAAA,MAAA;AAAA,IAEpD;AA5EM,QAAA;AAEE,UAAA,OAAO,SAAW;AACpB,uBAAQ,KAAK,oBAAoB,GAC1B;AAGH,YAAAG,IAAY,KAAK,UAAUP,CAAS,GACpCQ,IAAmBT,EAAQ,UAAU,IAAIQ,CAAS;AAExD,UAAIC;AACK,eAAAA;AAGT,UAAI,CAACR;AACH,uBAAQ,MAAM,uBAAuB,GAC9B;AAIT,aAAO,qEAAoB,EAAE,KAAK,CAACS,MAAW;AAC5C,aAAK,gBAAgBA,EAAO,SACvB,KAAA,cAAc,KAAKT,CAAS,GACzBD,EAAA,UAAU,IAAIQ,GAAW,IAAI;AAAA,MAAA,CACtC,EAAE,MAAM,CAACH,MAAU;AACV,gBAAA,KAAK,uBAAuBA,CAAK;AAAA,MAAA,CAC1C;AAAA,aAEIA,GAAO;AACJ,cAAA,KAAK,0BAA0BA,CAAK;AAAA,IAAA;AAGvC,WAAA;AAAA,EAAA;AA6CX;AAjFEH,EADWF,GACI,aAAY,oBAAI,IAA0B;AADpD,IAAMW,IAANX;"}
package/es/src/json.d.ts CHANGED
@@ -8,9 +8,8 @@
8
8
  export declare function JsonToExcel(title?: string, json?: (string | number)[][], merge?: any): Error | undefined;
9
9
  /**
10
10
  * 将Excel数据转换为JSON
11
- * @param data - Excel数据
12
- * @param cb - 回调函数,用于处理转换后的JSON数据
11
+ * @param file - Excel文件
12
+ * @param cb - 转换完成后的回调函数
13
13
  * @param start - 开始行号
14
- * @returns 转换后的JSON数组
15
14
  */
16
- export declare function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[];
15
+ export declare function excelToJson(file: File, cb: (json: any[]) => void, start: number): Promise<any[]>;
package/es/src/json.mjs CHANGED
@@ -1,37 +1,45 @@
1
- import { utils as s, writeFile as S, read as _ } from "../_virtual/xlsx/xlsx.mjs";
2
- function x(c = "", t = [], r) {
1
+ import { utils as c, writeFile as m, read as A } from "../_virtual/xlsx/xlsx.mjs";
2
+ function E(a = "", o = [], t) {
3
3
  try {
4
- if (!t.length)
4
+ if (!o.length)
5
5
  return;
6
- const e = s.aoa_to_sheet(t);
7
- r && (e["!merges"] = r);
8
- const o = s.book_new();
9
- s.book_append_sheet(o, e, ""), S(o, `${c}.xlsx`);
6
+ const e = c.aoa_to_sheet(o);
7
+ t && (e["!merges"] = t);
8
+ const n = c.book_new();
9
+ c.book_append_sheet(n, e, ""), m(n, `${a}.xlsx`);
10
10
  } catch (e) {
11
11
  return console.log("e: ", e), new Error("数据导出失败");
12
12
  }
13
13
  }
14
- function d(c, t, r) {
15
- const e = _(c, { type: "binary" }), o = [];
16
- for (const i in e.Sheets)
17
- if (Object.prototype.hasOwnProperty.call(e.Sheets, i)) {
18
- let n = [];
19
- const a = e.Sheets[i]["!ref"] || "", l = a.split(":"), f = r + l[1].toString();
20
- n = n.concat(s.sheet_to_json(e.Sheets[i], { header: 1, range: r ? f : a }));
21
- const p = n[0];
22
- n.shift();
23
- const u = n.map((w) => {
24
- const h = {};
25
- return p.forEach((k, y) => {
26
- h[k] = w[y];
27
- }), h;
28
- });
29
- o.push(...u);
30
- }
31
- return t && t(o), o;
14
+ function F(a, o, t) {
15
+ return new Promise((e, n) => {
16
+ const i = new FileReader();
17
+ i.readAsArrayBuffer(a), i.onload = (l) => {
18
+ var p;
19
+ const w = (p = l.target) == null ? void 0 : p.result, s = A(w, { type: "binary" }), h = [];
20
+ for (const f in s.Sheets)
21
+ if (Object.prototype.hasOwnProperty.call(s.Sheets, f)) {
22
+ let r = [];
23
+ const d = s.Sheets[f]["!ref"] || "", y = d.split(":"), k = t + y[1].toString();
24
+ r = r.concat(c.sheet_to_json(s.Sheets[f], { header: 1, range: t ? k : d }));
25
+ const S = r[0];
26
+ r.shift();
27
+ const _ = r.map((b) => {
28
+ const u = {};
29
+ return S.forEach((x, g) => {
30
+ u[x] = b[g];
31
+ }), u;
32
+ });
33
+ h.push(..._);
34
+ }
35
+ o && o(h), e(h);
36
+ }, i.onerror = (l) => {
37
+ n(l);
38
+ };
39
+ });
32
40
  }
33
41
  export {
34
- x as JsonToExcel,
35
- d as excelToJson
42
+ E as JsonToExcel,
43
+ F as excelToJson
36
44
  };
37
45
  //# sourceMappingURL=json.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.mjs","sources":["../../../../packages/utils/src/json.ts"],"sourcesContent":["import { read, utils, writeFile } from 'xlsx'\n\n/**\n * 将JSON数据导出为Excel文件\n * @param title - Excel文件的标题\n * @param json - JSON数据\n * @param merge - 合并单元格的配置\n * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称\n */\nexport function JsonToExcel(title = '', json: (string | number)[][] = [], merge?: any) {\n try {\n if (!json.length) {\n return\n }\n // 创建worksheet\n const worksheet = utils.aoa_to_sheet(json)\n if (merge) {\n worksheet['!merges'] = merge\n }\n // 新建空workbook,加入worksheet\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, '')\n writeFile(workbook, `${title}.xlsx`)\n }\n catch (e) {\n console.log('e: ', e)\n return new Error('数据导出失败')\n }\n}\n\n/**\n * 将Excel数据转换为JSON\n * @param data - Excel数据\n * @param cb - 回调函数,用于处理转换后的JSON数据\n * @param start - 开始行号\n * @returns 转换后的JSON数组\n */\nexport function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[] {\n const workbook = read(data, { type: 'binary' })\n // 遍历每张表读取\n const json = []\n for (const sheet in workbook.Sheets) {\n if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {\n let arr: string[][] = []\n const fromTo = workbook.Sheets[sheet]['!ref'] || ''\n const end = fromTo.split(':')\n const space = start + end[1].toString()\n arr = arr.concat(utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, range: start ? space : fromTo }))\n const titleArr = arr[0]\n arr.shift()\n const excelJsonArr = arr.map((item) => {\n const obj: {\n [key: string]: any\n } = {}\n titleArr.forEach((titleItem: string, index: number) => {\n obj[titleItem] = item[index]\n })\n return obj\n })\n json.push(...excelJsonArr)\n }\n }\n if (cb) {\n cb(json)\n }\n return json\n}\n"],"names":["JsonToExcel","title","json","merge","worksheet","utils","workbook","writeFile","excelToJson","data","cb","start","read","sheet","arr","fromTo","end","space","titleArr","excelJsonArr","item","obj","titleItem","index"],"mappings":";AASO,SAASA,EAAYC,IAAQ,IAAIC,IAA8B,CAAA,GAAIC,GAAa;AACjF,MAAA;AACE,QAAA,CAACD,EAAK;AACR;AAGI,UAAAE,IAAYC,EAAM,aAAaH,CAAI;AACzC,IAAIC,MACFC,EAAU,SAAS,IAAID;AAGnB,UAAAG,IAAWD,EAAM,SAAS;AAC1B,IAAAA,EAAA,kBAAkBC,GAAUF,GAAW,EAAE,GACrCG,EAAAD,GAAU,GAAGL,CAAK,OAAO;AAAA,WAE9B,GAAG;AACA,mBAAA,IAAI,OAAO,CAAC,GACb,IAAI,MAAM,QAAQ;AAAA,EAAA;AAE7B;AASgB,SAAAO,EAAYC,GAAaC,GAA2BC,GAAsB;AACxF,QAAML,IAAWM,EAAKH,GAAM,EAAE,MAAM,UAAU,GAExCP,IAAO,CAAC;AACH,aAAAW,KAASP,EAAS;AAC3B,QAAI,OAAO,UAAU,eAAe,KAAKA,EAAS,QAAQO,CAAK,GAAG;AAChE,UAAIC,IAAkB,CAAC;AACvB,YAAMC,IAAST,EAAS,OAAOO,CAAK,EAAE,MAAM,KAAK,IAC3CG,IAAMD,EAAO,MAAM,GAAG,GACtBE,IAAQN,IAAQK,EAAI,CAAC,EAAE,SAAS;AACtC,MAAAF,IAAMA,EAAI,OAAOT,EAAM,cAAcC,EAAS,OAAOO,CAAK,GAAG,EAAE,QAAQ,GAAG,OAAOF,IAAQM,IAAQF,EAAA,CAAQ,CAAC;AACpG,YAAAG,IAAWJ,EAAI,CAAC;AACtB,MAAAA,EAAI,MAAM;AACV,YAAMK,IAAeL,EAAI,IAAI,CAACM,MAAS;AACrC,cAAMC,IAEF,CAAC;AACI,eAAAH,EAAA,QAAQ,CAACI,GAAmBC,MAAkB;AACjD,UAAAF,EAAAC,CAAS,IAAIF,EAAKG,CAAK;AAAA,QAAA,CAC5B,GACMF;AAAA,MAAA,CACR;AACI,MAAAnB,EAAA,KAAK,GAAGiB,CAAY;AAAA,IAAA;AAG7B,SAAIT,KACFA,EAAGR,CAAI,GAEFA;AACT;"}
1
+ {"version":3,"file":"json.mjs","sources":["../../../../packages/utils/src/json.ts"],"sourcesContent":["import { read, utils, writeFile } from 'xlsx'\n\n/**\n * 将JSON数据导出为Excel文件\n * @param title - Excel文件的标题\n * @param json - JSON数据\n * @param merge - 合并单元格的配置\n * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称\n */\nexport function JsonToExcel(title = '', json: (string | number)[][] = [], merge?: any) {\n try {\n if (!json.length) {\n return\n }\n // 创建worksheet\n const worksheet = utils.aoa_to_sheet(json)\n if (merge) {\n worksheet['!merges'] = merge\n }\n // 新建空workbook,加入worksheet\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, '')\n writeFile(workbook, `${title}.xlsx`)\n }\n catch (e) {\n console.log('e: ', e)\n return new Error('数据导出失败')\n }\n}\n\n/**\n * 将Excel数据转换为JSON\n * @param file - Excel文件\n * @param cb - 转换完成后的回调函数\n * @param start - 开始行号\n */\nexport function excelToJson(file: File, cb: (json: any[]) => void, start: number): Promise<any[]> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsArrayBuffer(file)\n reader.onload = (e) => {\n const data = e.target?.result\n const workbook = read(data, { type: 'binary' })\n // 遍历每张表读取\n const json = []\n for (const sheet in workbook.Sheets) {\n if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {\n let arr: string[][] = []\n const fromTo = workbook.Sheets[sheet]['!ref'] || ''\n const end = fromTo.split(':')\n const space = start + end[1].toString()\n arr = arr.concat(utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, range: start ? space : fromTo }))\n const titleArr = arr[0]\n arr.shift()\n const excelJsonArr = arr.map((item) => {\n const obj: {\n [key: string]: any\n } = {}\n titleArr.forEach((titleItem: string, index: number) => {\n obj[titleItem] = item[index]\n })\n return obj\n })\n json.push(...excelJsonArr)\n }\n }\n if (cb) {\n cb(json)\n }\n resolve(json)\n }\n reader.onerror = (e) => {\n reject(e)\n }\n })\n}\n"],"names":["JsonToExcel","title","json","merge","worksheet","utils","workbook","writeFile","excelToJson","file","cb","start","resolve","reject","reader","e","data","_a","read","sheet","arr","fromTo","end","space","titleArr","excelJsonArr","item","obj","titleItem","index"],"mappings":";AASO,SAASA,EAAYC,IAAQ,IAAIC,IAA8B,CAAA,GAAIC,GAAa;AACjF,MAAA;AACE,QAAA,CAACD,EAAK;AACR;AAGI,UAAAE,IAAYC,EAAM,aAAaH,CAAI;AACzC,IAAIC,MACFC,EAAU,SAAS,IAAID;AAGnB,UAAAG,IAAWD,EAAM,SAAS;AAC1B,IAAAA,EAAA,kBAAkBC,GAAUF,GAAW,EAAE,GACrCG,EAAAD,GAAU,GAAGL,CAAK,OAAO;AAAA,WAE9B,GAAG;AACA,mBAAA,IAAI,OAAO,CAAC,GACb,IAAI,MAAM,QAAQ;AAAA,EAAA;AAE7B;AAQgB,SAAAO,EAAYC,GAAYC,GAA2BC,GAA+B;AAChG,SAAO,IAAI,QAAQ,CAACC,GAASC,MAAW;AAChC,UAAAC,IAAS,IAAI,WAAW;AAC9B,IAAAA,EAAO,kBAAkBL,CAAI,GACtBK,EAAA,SAAS,CAACC,MAAM;;AACf,YAAAC,KAAOC,IAAAF,EAAE,WAAF,gBAAAE,EAAU,QACjBX,IAAWY,EAAKF,GAAM,EAAE,MAAM,UAAU,GAExCd,IAAO,CAAC;AACH,iBAAAiB,KAASb,EAAS;AAC3B,YAAI,OAAO,UAAU,eAAe,KAAKA,EAAS,QAAQa,CAAK,GAAG;AAChE,cAAIC,IAAkB,CAAC;AACvB,gBAAMC,IAASf,EAAS,OAAOa,CAAK,EAAE,MAAM,KAAK,IAC3CG,IAAMD,EAAO,MAAM,GAAG,GACtBE,IAAQZ,IAAQW,EAAI,CAAC,EAAE,SAAS;AACtC,UAAAF,IAAMA,EAAI,OAAOf,EAAM,cAAcC,EAAS,OAAOa,CAAK,GAAG,EAAE,QAAQ,GAAG,OAAOR,IAAQY,IAAQF,EAAA,CAAQ,CAAC;AACpG,gBAAAG,IAAWJ,EAAI,CAAC;AACtB,UAAAA,EAAI,MAAM;AACV,gBAAMK,IAAeL,EAAI,IAAI,CAACM,MAAS;AACrC,kBAAMC,IAEF,CAAC;AACI,mBAAAH,EAAA,QAAQ,CAACI,GAAmBC,MAAkB;AACjD,cAAAF,EAAAC,CAAS,IAAIF,EAAKG,CAAK;AAAA,YAAA,CAC5B,GACMF;AAAA,UAAA,CACR;AACI,UAAAzB,EAAA,KAAK,GAAGuB,CAAY;AAAA,QAAA;AAG7B,MAAIf,KACFA,EAAGR,CAAI,GAETU,EAAQV,CAAI;AAAA,IACd,GACOY,EAAA,UAAU,CAACC,MAAM;AACtB,MAAAF,EAAOE,CAAC;AAAA,IACV;AAAA,EAAA,CACD;AACH;"}
@@ -1,31 +1,26 @@
1
1
  declare class Storage {
2
2
  private readonly prefix;
3
- private constructor();
4
- static init(prefix?: string): Storage;
5
- static getInstance(): Storage;
6
- private getTopLevelDomain;
3
+ constructor(prefix?: string);
7
4
  local: {
8
- has: (key: string) => boolean;
9
- get: (key: string) => string | null;
10
- set: (key: string, value: string) => void;
11
- remove: (key: string) => void;
5
+ has: (key: string, usePrefix?: boolean) => boolean;
6
+ get: (key: string, usePrefix?: boolean) => string | null;
7
+ set: (key: string, value: string, usePrefix?: boolean) => void;
8
+ remove: (key: string, usePrefix?: boolean) => void;
12
9
  clear: () => void;
13
10
  };
14
11
  session: {
15
- has: (key: string) => boolean;
16
- get: (key: string) => string | null;
17
- set: (key: string, value: string) => void;
18
- remove: (key: string) => void;
12
+ has: (key: string, usePrefix?: boolean) => boolean;
13
+ get: (key: string, usePrefix?: boolean) => string | null;
14
+ set: (key: string, value: string, usePrefix?: boolean) => void;
15
+ remove: (key: string, usePrefix?: boolean) => void;
19
16
  clear: () => void;
20
17
  };
21
18
  cookie: {
22
- has: (key: string) => boolean;
23
- get: (key: string) => string | null;
24
- set: (key: string, value: string, expires?: number, path?: string, domain?: string) => void;
25
- remove: (key: string, path?: string, domain?: string) => void;
19
+ has: (key: string, usePrefix?: boolean) => boolean;
20
+ get: (key: string, usePrefix?: boolean) => string | null;
21
+ set: (key: string, value: string, expires?: number, path?: string, domain?: string, usePrefix?: boolean) => void;
22
+ remove: (key: string, path?: string, domain?: string, usePrefix?: boolean) => void;
26
23
  clear: () => void;
27
24
  };
28
25
  }
29
- export declare const initStorage: typeof Storage.init;
30
- export declare const useStorage: typeof Storage.getInstance;
31
- export {};
26
+ export { Storage };
@@ -1,51 +1,69 @@
1
- var m = Object.defineProperty;
2
- var h = (r, e, t) => e in r ? m(r, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[e] = t;
3
- var n = (r, e, t) => h(r, typeof e != "symbol" ? e + "" : e, t);
4
- let o = null;
5
- class i {
6
- constructor(e) {
1
+ var f = Object.defineProperty;
2
+ var m = (s, e, t) => e in s ? f(s, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[e] = t;
3
+ var n = (s, e, t) => m(s, typeof e != "symbol" ? e + "" : e, t);
4
+ class u {
5
+ constructor(e = "qxs_") {
7
6
  n(this, "prefix");
8
7
  n(this, "local", {
9
- has: (e) => Object.prototype.hasOwnProperty.call(localStorage, `${this.prefix}${e}`),
10
- get: (e) => localStorage.getItem(`${this.prefix}${e}`),
11
- set: (e, t) => {
12
- localStorage.setItem(`${this.prefix}${e}`, t);
8
+ has: (e, t = !0) => {
9
+ const o = t ? `${this.prefix}${e}` : e;
10
+ return Object.prototype.hasOwnProperty.call(localStorage, o);
13
11
  },
14
- remove: (e) => {
15
- localStorage.removeItem(`${this.prefix}${e}`);
12
+ get: (e, t = !0) => {
13
+ const o = t ? `${this.prefix}${e}` : e;
14
+ return localStorage.getItem(o);
15
+ },
16
+ set: (e, t, o = !0) => {
17
+ const r = o ? `${this.prefix}${e}` : e;
18
+ localStorage.setItem(r, t);
19
+ },
20
+ remove: (e, t = !0) => {
21
+ const o = t ? `${this.prefix}${e}` : e;
22
+ localStorage.removeItem(o);
16
23
  },
17
24
  clear: () => {
18
25
  localStorage.clear();
19
26
  }
20
27
  });
21
28
  n(this, "session", {
22
- has: (e) => Object.prototype.hasOwnProperty.call(sessionStorage, `${this.prefix}${e}`),
23
- get: (e) => sessionStorage.getItem(`${this.prefix}${e}`),
24
- set: (e, t) => {
25
- sessionStorage.setItem(`${this.prefix}${e}`, t);
29
+ has: (e, t = !0) => {
30
+ const o = t ? `${this.prefix}${e}` : e;
31
+ return Object.prototype.hasOwnProperty.call(sessionStorage, o);
32
+ },
33
+ get: (e, t = !0) => {
34
+ const o = t ? `${this.prefix}${e}` : e;
35
+ return sessionStorage.getItem(o);
36
+ },
37
+ set: (e, t, o = !0) => {
38
+ const r = o ? `${this.prefix}${e}` : e;
39
+ sessionStorage.setItem(r, t);
26
40
  },
27
- remove: (e) => {
28
- sessionStorage.removeItem(`${this.prefix}${e}`);
41
+ remove: (e, t = !0) => {
42
+ const o = t ? `${this.prefix}${e}` : e;
43
+ sessionStorage.removeItem(o);
29
44
  },
30
45
  clear: () => {
31
46
  sessionStorage.clear();
32
47
  }
33
48
  });
34
49
  n(this, "cookie", {
35
- has: (e) => new RegExp(`(^|;)\\s*${e}=`).test(document.cookie),
36
- get: (e) => {
37
- const t = document.cookie.match(new RegExp(`(^|;)\\s*${e}=([^;]*)`));
38
- return t ? decodeURIComponent(t[2]) : null;
50
+ has: (e, t = !0) => {
51
+ const o = t ? `${this.prefix}${e}` : e;
52
+ return new RegExp(`(^|;)\\s*${o}=`).test(document.cookie);
39
53
  },
40
- set: (e, t, a = 1, l = "/", c = this.getTopLevelDomain()) => {
41
- const s = /* @__PURE__ */ new Date();
42
- s.setTime(s.getTime() + a * 24 * 60 * 60 * 1e3);
43
- const p = `;expires=${s.toUTCString()}`, $ = `;path=${l}`, g = c ? `;domain=${c}` : "";
44
- document.cookie = `${e}=${encodeURIComponent(t)}${p}${$}${g}`;
54
+ get: (e, t = !0) => {
55
+ const o = t ? `${this.prefix}${e}` : e, r = document.cookie.match(new RegExp(`(^|;)\\s*${o}=([^;]*)`));
56
+ return r ? decodeURIComponent(r[2]) : null;
45
57
  },
46
- remove: (e, t = "/", a = this.getTopLevelDomain()) => {
47
- const l = `;expires=${(/* @__PURE__ */ new Date(0)).toUTCString()}`, c = `;path=${t}`, s = a ? `;domain=${a}` : "";
48
- document.cookie = `${e}=;${l}${c}${s}`;
58
+ set: (e, t, o = 1, r = "/", c = window.location.hostname, a = !0) => {
59
+ const p = a ? `${this.prefix}${e}` : e, i = /* @__PURE__ */ new Date();
60
+ i.setTime(i.getTime() + o * 24 * 60 * 60 * 1e3);
61
+ const $ = `;expires=${i.toUTCString()}`, x = `;path=${r}`, h = c ? `;domain=${c}` : "";
62
+ document.cookie = `${p}=${encodeURIComponent(t)}${$}${x}${h}`;
63
+ },
64
+ remove: (e, t = "/", o = window.location.hostname, r = !0) => {
65
+ const c = r ? `${this.prefix}${e}` : e, a = `;expires=${(/* @__PURE__ */ new Date(0)).toUTCString()}`, p = `;path=${t}`, i = o ? `;domain=${o}` : "";
66
+ document.cookie = `${c}=;${a}${p}${i}`;
49
67
  },
50
68
  clear: () => {
51
69
  const e = document.cookie.match(/[^ =;]+(?==)/g);
@@ -56,20 +74,8 @@ class i {
56
74
  });
57
75
  this.prefix = e;
58
76
  }
59
- static init(e = "qxs_") {
60
- return o ? (console.warn("Storage has already been initialized"), o) : (o = new i(e), o);
61
- }
62
- static getInstance() {
63
- return o || (o = new i("qxs_")), o;
64
- }
65
- getTopLevelDomain(e = window.location.hostname) {
66
- const t = e.split(".");
67
- return t.length > 2 ? t.slice(-2).join(".") : e;
68
- }
69
77
  }
70
- const x = i.init, S = i.getInstance;
71
78
  export {
72
- x as initStorage,
73
- S as useStorage
79
+ u as Storage
74
80
  };
75
81
  //# sourceMappingURL=storage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.mjs","sources":["../../../../packages/utils/src/storage.ts"],"sourcesContent":["// 使用单例模式\nlet instance: Storage | null = null\n\nclass Storage {\n private readonly prefix: string\n\n private constructor(prefix: string) {\n this.prefix = prefix\n }\n\n static init(prefix = 'qxs_'): Storage {\n if (instance) {\n // throw new Error('Storage has already been initialized')\n console.warn('Storage has already been initialized')\n return instance\n }\n instance = new Storage(prefix)\n return instance\n }\n\n static getInstance(): Storage {\n if (!instance) {\n instance = new Storage('qxs_') // 使用默认前缀\n }\n return instance\n }\n\n private getTopLevelDomain(hostname = window.location.hostname) {\n const parts = hostname.split('.')\n if (parts.length > 2) {\n return parts.slice(-2).join('.')\n }\n return hostname\n }\n\n local = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(localStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return localStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n localStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n localStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n localStorage.clear()\n },\n }\n\n session = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(sessionStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return sessionStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n sessionStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n sessionStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n sessionStorage.clear()\n },\n }\n\n cookie = {\n has: (key: string) => {\n return new RegExp(`(^|;)\\\\s*${key}=`).test(document.cookie)\n },\n\n get: (key: string) => {\n const match = document.cookie.match(new RegExp(`(^|;)\\\\s*${key}=([^;]*)`))\n return match ? decodeURIComponent(match[2]) : null\n },\n\n set: (key: string, value: string, expires = 1, path = '/', domain = this.getTopLevelDomain()) => {\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 = `${key}=${encodeURIComponent(value)}${expiresStr}${pathStr}${domainStr}`\n },\n\n remove: (key: string, path = '/', domain = this.getTopLevelDomain()) => {\n // 如果设置了域,那么确保域和路径与设置cookie时相同,以确保删除成功\n const expiresStr = `;expires=${new Date(0).toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${key}=;${expiresStr}${pathStr}${domainStr}`\n },\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// 导出两个方法\nexport const initStorage = Storage.init\nexport const useStorage = Storage.getInstance\n"],"names":["instance","Storage","prefix","__publicField","key","value","match","expires","path","domain","expiresDate","expiresStr","pathStr","domainStr","keys","hostname","parts","initStorage","useStorage"],"mappings":"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"}
1
+ {"version":3,"file":"storage.mjs","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","prefix","__publicField","key","usePrefix","prefixedKey","value","match","expires","path","domain","expiresDate","expiresStr","pathStr","domainStr","keys"],"mappings":"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"}
package/es/src/types.d.ts CHANGED
@@ -18,3 +18,9 @@ export declare function isJSONString(str: string): boolean;
18
18
  * isImageByMimeType(file); // true
19
19
  */
20
20
  export declare function isImageByMimeType(file: File): boolean;
21
+ /**
22
+ * 判断一个值是否为普通对象
23
+ * @param value - 要判断的值
24
+ * @returns 如果值是普通对象,则返回 true,否则返回 false
25
+ */
26
+ export declare function isPlainObject(value: unknown): value is Record<string, any>;
package/es/src/types.mjs CHANGED
@@ -1,11 +1,11 @@
1
- const r = (e) => e === void 0, i = (e) => typeof e == "boolean", o = (e) => typeof e == "number";
1
+ const o = (e) => e === void 0, r = (e) => typeof e == "boolean", i = (e) => typeof e == "number";
2
2
  function s(e) {
3
3
  return typeof Element > "u" ? !1 : e instanceof Element;
4
4
  }
5
- function u(e) {
5
+ function c(e) {
6
6
  return e === window;
7
7
  }
8
- function c(e) {
8
+ function u(e) {
9
9
  return /^[\],:{}\s]*$/.test(e.replace(/\\["\\/bfnrtu]/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, "")) && t(e);
10
10
  }
11
11
  function t(e) {
@@ -18,13 +18,20 @@ function t(e) {
18
18
  function f(e) {
19
19
  return e.type.startsWith("image/");
20
20
  }
21
+ function l(e) {
22
+ if (e === null || typeof e != "object")
23
+ return !1;
24
+ const n = Object.getPrototypeOf(e);
25
+ return n === null || n === Object.prototype;
26
+ }
21
27
  export {
22
- i as isBoolean,
28
+ r as isBoolean,
23
29
  s as isElement,
24
30
  f as isImageByMimeType,
25
- c as isJSONString,
26
- o as isNumber,
27
- r as isUndefined,
28
- u as isWindow
31
+ u as isJSONString,
32
+ i as isNumber,
33
+ l as isPlainObject,
34
+ o as isUndefined,
35
+ c as isWindow
29
36
  };
30
37
  //# sourceMappingURL=types.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","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"],"names":["isUndefined","val","isBoolean","isNumber","isElement","isWindow","isJSONString","str","isValidJSON","e","isImageByMimeType","file"],"mappings":"AAAa,MAAAA,IAAc,CAACC,MAA+BA,MAAQ,QACtDC,IAAY,CAACD,MAA6B,OAAOA,KAAQ,WACzDE,IAAW,CAACF,MAA4B,OAAOA,KAAQ;AAE7D,SAASG,EAAU,GAA0B;AAC9C,SAAA,OAAO,UAAY,MACd,KAEF,aAAa;AACtB;AAEO,SAASC,EAASJ,GAA6B;AACpD,SAAOA,MAAQ;AACjB;AAOO,SAASK,EAAaC,GAAa;AAMjC,SALiB,gBACrB,KAAKA,EAAI,QAAQ,mBAAmB,GAAG,EACrC,QAAQ,oEAAoE,GAAG,EAC/E,QAAQ,wBAAwB,EAAE,CAAC,KAEdC,EAAYD,CAAG;AAC3C;AAOA,SAASC,EAAYD,GAAa;AAC5B,MAAA;AACF,gBAAK,MAAMA,CAAG,GACP;AAAA,WAEFE,GAAG;AACA,mBAAA,IAAI,OAAOA,CAAC,GACb;AAAA,EAAA;AAEX;AAUO,SAASC,EAAkBC,GAAY;AACrC,SAAAA,EAAK,KAAK,WAAW,QAAQ;AACtC;"}
1
+ {"version":3,"file":"types.mjs","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","isWindow","isJSONString","str","isValidJSON","e","isImageByMimeType","file","isPlainObject","value","proto"],"mappings":"AAAa,MAAAA,IAAc,CAACC,MAA+BA,MAAQ,QACtDC,IAAY,CAACD,MAA6B,OAAOA,KAAQ,WACzDE,IAAW,CAACF,MAA4B,OAAOA,KAAQ;AAE7D,SAASG,EAAU,GAA0B;AAC9C,SAAA,OAAO,UAAY,MACd,KAEF,aAAa;AACtB;AAEO,SAASC,EAASJ,GAA6B;AACpD,SAAOA,MAAQ;AACjB;AAOO,SAASK,EAAaC,GAAa;AAMjC,SALiB,gBACrB,KAAKA,EAAI,QAAQ,mBAAmB,GAAG,EACrC,QAAQ,oEAAoE,GAAG,EAC/E,QAAQ,wBAAwB,EAAE,CAAC,KAEdC,EAAYD,CAAG;AAC3C;AAOA,SAASC,EAAYD,GAAa;AAC5B,MAAA;AACF,gBAAK,MAAMA,CAAG,GACP;AAAA,WAEFE,GAAG;AACA,mBAAA,IAAI,OAAOA,CAAC,GACb;AAAA,EAAA;AAEX;AAUO,SAASC,EAAkBC,GAAY;AACrC,SAAAA,EAAK,KAAK,WAAW,QAAQ;AACtC;AAOO,SAASC,EAAcC,GAA8C;AAC1E,MAAIA,MAAU,QAAQ,OAAOA,KAAU;AAC9B,WAAA;AAIH,QAAAC,IAAQ,OAAO,eAAeD,CAAK;AAIlC,SAAAC,MAAU,QAAQA,MAAU,OAAO;AAC5C;"}
@@ -0,0 +1,47 @@
1
+ import { AxiosInstance, AxiosRequestConfig, AxiosStatic } from 'axios';
2
+
3
+ export interface SuccessResponse<T> {
4
+ code: number;
5
+ count: number;
6
+ data: T;
7
+ message: string;
8
+ }
9
+ export interface ErrorResponse {
10
+ code: number;
11
+ data: null;
12
+ message: string;
13
+ }
14
+ export interface UseApiResponse<W extends boolean = false, T = unknown> {
15
+ res: W extends true ? SuccessResponse<T> : T;
16
+ error: ErrorResponse | null;
17
+ }
18
+ export interface UrlObjectType {
19
+ url: string;
20
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
21
+ proxyPrefix?: string;
22
+ }
23
+ export type ApiTypeMap<U extends UrlObjectType> = {
24
+ [K in U['url']]: {
25
+ request: any;
26
+ response: any;
27
+ };
28
+ };
29
+ type RequestPayload<T> = T extends {
30
+ data: any;
31
+ } ? T['data'] : T;
32
+ type RequestParams<T> = T extends {
33
+ params: any;
34
+ } ? T['params'] : T;
35
+ export declare class ApiService<T extends ApiTypeMap<U>, U extends UrlObjectType> {
36
+ private apiInstance;
37
+ private axiosInstance;
38
+ private static instance;
39
+ constructor(apiInstance: AxiosInstance, axiosInstance: AxiosStatic);
40
+ private isBusinessError;
41
+ private isAxiosResponse;
42
+ private isErrorResponse;
43
+ useApi: <K extends U, W extends boolean = false>(axiosConfig: Omit<AxiosRequestConfig<RequestPayload<T[K["url"]]["request"]>>, "params"> & K & {
44
+ params?: RequestParams<T[K["url"]]["request"]>;
45
+ }, params?: RequestParams<T[K["url"]]["request"]>, isWholeResponse?: W) => Promise<UseApiResponse<W, T[K["url"]]["response"]>>;
46
+ }
47
+ export {};
@@ -0,0 +1,44 @@
1
+ var u = Object.defineProperty;
2
+ var x = (i, s, e) => s in i ? u(i, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[s] = e;
3
+ var a = (i, s, e) => x(i, typeof s != "symbol" ? s + "" : s, e);
4
+ import { isPlainObject as d } from "./types.mjs";
5
+ const r = class r {
6
+ constructor(s, e) {
7
+ a(this, "useApi", async (s, e, h) => {
8
+ let c = null, o = null;
9
+ try {
10
+ const t = {
11
+ ...s,
12
+ ...["GET"].includes(s.method.toUpperCase()) ? { params: e } : { data: e }
13
+ };
14
+ t.url = (t.proxyPrefix || "") + s.url, delete t.proxyPrefix;
15
+ const n = await this.apiInstance(t);
16
+ c = h ? n.data : n.data.data;
17
+ } catch (t) {
18
+ if (this.axiosInstance.isAxiosError(t)) {
19
+ const { statusText: n = "", status: f } = t.response || {};
20
+ console.log(n ? `${n}:${f}` : JSON.stringify(t));
21
+ } else this.isAxiosResponse(t) ? o = t.data : this.isErrorResponse(t) && (o = t);
22
+ }
23
+ return { res: c, error: o };
24
+ });
25
+ if (this.apiInstance = s, this.axiosInstance = e, r.instance)
26
+ return r.instance;
27
+ r.instance = this;
28
+ }
29
+ isBusinessError(s) {
30
+ return d(s) && typeof s.message == "string" && typeof s.code == "number" && s.code !== 0;
31
+ }
32
+ isAxiosResponse(s) {
33
+ return d(s) && s.data !== void 0 && this.isBusinessError(s.data) && s.status !== void 0 && s.statusText !== void 0 && s.headers !== void 0 && s.config !== void 0 && s.request !== void 0;
34
+ }
35
+ isErrorResponse(s) {
36
+ return "code" in s && "data" in s && "message" in s && s.code !== 0;
37
+ }
38
+ };
39
+ a(r, "instance");
40
+ let p = r;
41
+ export {
42
+ p as ApiService
43
+ };
44
+ //# sourceMappingURL=use-api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-api.mjs","sources":["../../../../packages/utils/src/use-api.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosStatic } 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 private axiosInstance: AxiosStatic,\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) {\n if (this.axiosInstance.isAxiosError(err)) {\n const { statusText = '', status } = err.response || {}\n console.log(statusText ? `${statusText}:${status}` : JSON.stringify(err))\n }\n else if (this.isAxiosResponse(err)) {\n error = err.data\n }\n else if (this.isErrorResponse(err)) {\n error = err\n }\n }\n\n return { res: res!, error }\n }\n}\n"],"names":["_ApiService","apiInstance","axiosInstance","__publicField","axiosConfig","params","isWholeResponse","res","error","config","response","err","statusText","status","obj","isPlainObject","value","ApiService"],"mappings":";;;;AAqCO,MAAMA,IAAN,MAAMA,EAGX;AAAA,EAGA,YACUC,GACAC,GACR;AA6BK,IAAAC,EAAA,gBAAS,OAIdC,GAGAC,GACAC,MACwD;AACxD,UAAIC,IAAgE,MAChEC,IAAiC;AAEjC,UAAA;AACF,cAAMC,IAAS;AAAA,UACb,GAAGL;AAAA,UACH,GAAI,CAAC,KAAK,EAAE,SAASA,EAAY,OAAO,YAAa,CAAA,IAAI,EAAE,QAAAC,MAAW,EAAE,MAAMA,EAAO;AAAA,QACvF;AAEA,QAAAI,EAAO,OAAOA,EAAO,eAAe,MAAML,EAAY,KACtD,OAAOK,EAAO;AAEd,cAAMC,IAAW,MAAM,KAAK,YAAsDD,CAAM;AACxF,QAAAF,IAAMD,IACFI,EAAS,OACTA,EAAS,KAAK;AAAA,eAEbC,GAAK;AACV,YAAI,KAAK,cAAc,aAAaA,CAAG,GAAG;AACxC,gBAAM,EAAE,YAAAC,IAAa,IAAI,QAAAC,MAAWF,EAAI,YAAY,CAAC;AAC7C,kBAAA,IAAIC,IAAa,GAAGA,CAAU,IAAIC,CAAM,KAAK,KAAK,UAAUF,CAAG,CAAC;AAAA,QAEjE,MAAA,CAAA,KAAK,gBAAgBA,CAAG,IAC/BH,IAAQG,EAAI,OAEL,KAAK,gBAAgBA,CAAG,MACvBH,IAAAG;AAAA,MACV;AAGK,aAAA,EAAE,KAAAJ,GAAW,OAAAC,EAAM;AAAA,IAC5B;AArEE,QAHQ,KAAA,cAAAP,GACA,KAAA,gBAAAC,GAEJF,EAAW;AACb,aAAOA,EAAW;AAEpB,IAAAA,EAAW,WAAW;AAAA,EAAA;AAAA,EAGhB,gBAAgBc,GAA6B;AACnD,WAAOC,EAAcD,CAAG,KACnB,OAAOA,EAAI,WAAY,YACvB,OAAOA,EAAI,QAAS,YACpBA,EAAI,SAAS;AAAA,EAAA;AAAA,EAGZ,gBAAgBE,GAAoC;AACnD,WAAAD,EAAcC,CAAK,KACrBA,EAAM,SAAS,UACf,KAAK,gBAAgBA,EAAM,IAAI,KAC/BA,EAAM,WAAW,UACjBA,EAAM,eAAe,UACrBA,EAAM,YAAY,UAClBA,EAAM,WAAW,UACjBA,EAAM,YAAY;AAAA,EAAA;AAAA,EAGjB,gBAAgBA,GAAoC;AAC1D,WAAO,UAAUA,KAAS,UAAUA,KAAS,aAAaA,KAASA,EAAM,SAAS;AAAA,EAAA;AA6CtF;AA5EEb,EAJWH,GAII;AAJV,IAAMiB,IAANjB;"}
package/lib/index.d.ts CHANGED
@@ -2,7 +2,8 @@ export * from './src/argo-log';
2
2
  export * from './src/device';
3
3
  export * from './src/file-operations';
4
4
  export * from './src/json';
5
- export { generateSignedUrl, type OssClientConfig, type OssConfig, type OssCredentials, OssUploader, uploadFile, } from './src/oss-uploader';
5
+ export * from './src/oss-uploader';
6
6
  export * from './src/storage';
7
7
  export * from './src/types';
8
+ export * from './src/use-api';
8
9
  export * from './src/watermark';
package/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("./src/argo-log.js"),t=require("./src/device.js"),i=require("./src/file-operations.js"),r=require("./src/json.js"),o=require("./src/oss-uploader.js"),s=require("./src/storage.js"),e=require("./src/types.js"),a=require("./src/watermark.js");exports.ArgoLog=n.ArgoLog;exports.isMobile=t.isMobile;exports.createVideoUploader=i.createVideoUploader;exports.downloadFile=i.downloadFile;exports.JsonToExcel=r.JsonToExcel;exports.excelToJson=r.excelToJson;exports.OssUploader=o.OssUploader;exports.generateSignedUrl=o.generateSignedUrl;exports.uploadFile=o.uploadFile;exports.initStorage=s.initStorage;exports.useStorage=s.useStorage;exports.isBoolean=e.isBoolean;exports.isElement=e.isElement;exports.isImageByMimeType=e.isImageByMimeType;exports.isJSONString=e.isJSONString;exports.isNumber=e.isNumber;exports.isUndefined=e.isUndefined;exports.isWindow=e.isWindow;exports.watermark=a.watermark;
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;
2
2
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- interface EnvironmentConfig {
1
+ export interface EnvironmentConfig {
2
2
  encryptType?: number;
3
3
  debugMode?: number;
4
4
  appkey: string;
@@ -22,12 +22,11 @@ interface EnvironmentConfig {
22
22
  * argoLog.track('event_name', { key: 'value' });
23
23
  * ```
24
24
  */
25
- export declare class ArgoLog {
25
+ export declare class ArgoLog<T = EnvironmentConfig> {
26
26
  private static instances;
27
27
  private AnalysysAgent;
28
- constructor(envConfig: EnvironmentConfig);
28
+ constructor(envConfig: T);
29
29
  track: (name: string, opt?: Record<string, any>) => void;
30
30
  setProfile: (info: Record<string, any>) => void;
31
31
  setAlias: (code: string) => void;
32
32
  }
33
- export {};
@@ -1 +1 @@
1
- {"version":3,"file":"argo-log.js","sources":["../../../../packages/utils/src/argo-log.ts"],"sourcesContent":["// import AnalysysAgent from 'ans-javascript-sdk'\n\n// 定义配置项的类型别名\ninterface 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 {\n private static instances = new Map<string, ArgoLog>()\n private AnalysysAgent: any | null = null\n\n constructor(envConfig: EnvironmentConfig) {\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":"oPA4BO,MAAMA,EAAN,MAAMA,CAAQ,CAInB,YAAYC,EAA8B,CAFlCC,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":["// 定义配置项的类型别名\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"}
package/lib/src/json.d.ts CHANGED
@@ -8,9 +8,8 @@
8
8
  export declare function JsonToExcel(title?: string, json?: (string | number)[][], merge?: any): Error | undefined;
9
9
  /**
10
10
  * 将Excel数据转换为JSON
11
- * @param data - Excel数据
12
- * @param cb - 回调函数,用于处理转换后的JSON数据
11
+ * @param file - Excel文件
12
+ * @param cb - 转换完成后的回调函数
13
13
  * @param start - 开始行号
14
- * @returns 转换后的JSON数组
15
14
  */
16
- export declare function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[];
15
+ export declare function excelToJson(file: File, cb: (json: any[]) => void, start: number): Promise<any[]>;
package/lib/src/json.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../_virtual/xlsx/xlsx.js");function w(c="",s=[],n){try{if(!s.length)return;const e=t.utils.aoa_to_sheet(s);n&&(e["!merges"]=n);const o=t.utils.book_new();t.utils.book_append_sheet(o,e,""),t.writeFile(o,`${c}.xlsx`)}catch(e){return console.log("e: ",e),new Error("数据导出失败")}}function y(c,s,n){const e=t.read(c,{type:"binary"}),o=[];for(const l in e.Sheets)if(Object.prototype.hasOwnProperty.call(e.Sheets,l)){let r=[];const i=e.Sheets[l]["!ref"]||"",h=i.split(":"),u=n+h[1].toString();r=r.concat(t.utils.sheet_to_json(e.Sheets[l],{header:1,range:n?u:i}));const f=r[0];r.shift();const p=r.map(x=>{const a={};return f.forEach((b,k)=>{a[b]=x[k]}),a});o.push(...p)}return s&&s(o),o}exports.JsonToExcel=w;exports.excelToJson=y;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("../_virtual/xlsx/xlsx.js");function T(l="",t=[],r){try{if(!t.length)return;const e=o.utils.aoa_to_sheet(t);r&&(e["!merges"]=r);const s=o.utils.book_new();o.utils.book_append_sheet(s,e,""),o.writeFile(s,`${l}.xlsx`)}catch(e){return console.log("e: ",e),new Error("数据导出失败")}}function J(l,t,r){return new Promise((e,s)=>{const a=new FileReader;a.readAsArrayBuffer(l),a.onload=i=>{var f;const w=(f=i.target)==null?void 0:f.result,c=o.read(w,{type:"binary"}),u=[];for(const h in c.Sheets)if(Object.prototype.hasOwnProperty.call(c.Sheets,h)){let n=[];const d=c.Sheets[h]["!ref"]||"",x=d.split(":"),b=r+x[1].toString();n=n.concat(o.utils.sheet_to_json(c.Sheets[h],{header:1,range:r?b:d}));const y=n[0];n.shift();const g=n.map(k=>{const p={};return y.forEach((S,_)=>{p[S]=k[_]}),p});u.push(...g)}t&&t(u),e(u)},a.onerror=i=>{s(i)}})}exports.JsonToExcel=T;exports.excelToJson=J;
2
2
  //# sourceMappingURL=json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sources":["../../../../packages/utils/src/json.ts"],"sourcesContent":["import { read, utils, writeFile } from 'xlsx'\n\n/**\n * 将JSON数据导出为Excel文件\n * @param title - Excel文件的标题\n * @param json - JSON数据\n * @param merge - 合并单元格的配置\n * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称\n */\nexport function JsonToExcel(title = '', json: (string | number)[][] = [], merge?: any) {\n try {\n if (!json.length) {\n return\n }\n // 创建worksheet\n const worksheet = utils.aoa_to_sheet(json)\n if (merge) {\n worksheet['!merges'] = merge\n }\n // 新建空workbook,加入worksheet\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, '')\n writeFile(workbook, `${title}.xlsx`)\n }\n catch (e) {\n console.log('e: ', e)\n return new Error('数据导出失败')\n }\n}\n\n/**\n * 将Excel数据转换为JSON\n * @param data - Excel数据\n * @param cb - 回调函数,用于处理转换后的JSON数据\n * @param start - 开始行号\n * @returns 转换后的JSON数组\n */\nexport function excelToJson(data: any[], cb: (json: any[]) => void, start: number): any[] {\n const workbook = read(data, { type: 'binary' })\n // 遍历每张表读取\n const json = []\n for (const sheet in workbook.Sheets) {\n if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {\n let arr: string[][] = []\n const fromTo = workbook.Sheets[sheet]['!ref'] || ''\n const end = fromTo.split(':')\n const space = start + end[1].toString()\n arr = arr.concat(utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, range: start ? space : fromTo }))\n const titleArr = arr[0]\n arr.shift()\n const excelJsonArr = arr.map((item) => {\n const obj: {\n [key: string]: any\n } = {}\n titleArr.forEach((titleItem: string, index: number) => {\n obj[titleItem] = item[index]\n })\n return obj\n })\n json.push(...excelJsonArr)\n }\n }\n if (cb) {\n cb(json)\n }\n return json\n}\n"],"names":["JsonToExcel","title","json","merge","worksheet","utils","workbook","writeFile","excelToJson","data","cb","start","read","sheet","arr","fromTo","end","space","titleArr","excelJsonArr","item","obj","titleItem","index"],"mappings":"4HASO,SAASA,EAAYC,EAAQ,GAAIC,EAA8B,CAAA,EAAIC,EAAa,CACjF,GAAA,CACE,GAAA,CAACD,EAAK,OACR,OAGI,MAAAE,EAAYC,EAAAA,MAAM,aAAaH,CAAI,EACrCC,IACFC,EAAU,SAAS,EAAID,GAGnB,MAAAG,EAAWD,QAAM,SAAS,EAC1BA,EAAAA,MAAA,kBAAkBC,EAAUF,EAAW,EAAE,EACrCG,EAAAA,UAAAD,EAAU,GAAGL,CAAK,OAAO,QAE9B,EAAG,CACA,eAAA,IAAI,MAAO,CAAC,EACb,IAAI,MAAM,QAAQ,CAAA,CAE7B,CASgB,SAAAO,EAAYC,EAAaC,EAA2BC,EAAsB,CACxF,MAAML,EAAWM,EAAAA,KAAKH,EAAM,CAAE,KAAM,SAAU,EAExCP,EAAO,CAAC,EACH,UAAAW,KAASP,EAAS,OAC3B,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAS,OAAQO,CAAK,EAAG,CAChE,IAAIC,EAAkB,CAAC,EACvB,MAAMC,EAAST,EAAS,OAAOO,CAAK,EAAE,MAAM,GAAK,GAC3CG,EAAMD,EAAO,MAAM,GAAG,EACtBE,EAAQN,EAAQK,EAAI,CAAC,EAAE,SAAS,EACtCF,EAAMA,EAAI,OAAOT,EAAA,MAAM,cAAcC,EAAS,OAAOO,CAAK,EAAG,CAAE,OAAQ,EAAG,MAAOF,EAAQM,EAAQF,CAAA,CAAQ,CAAC,EACpG,MAAAG,EAAWJ,EAAI,CAAC,EACtBA,EAAI,MAAM,EACV,MAAMK,EAAeL,EAAI,IAAKM,GAAS,CACrC,MAAMC,EAEF,CAAC,EACI,OAAAH,EAAA,QAAQ,CAACI,EAAmBC,IAAkB,CACjDF,EAAAC,CAAS,EAAIF,EAAKG,CAAK,CAAA,CAC5B,EACMF,CAAA,CACR,EACInB,EAAA,KAAK,GAAGiB,CAAY,CAAA,CAG7B,OAAIT,GACFA,EAAGR,CAAI,EAEFA,CACT"}
1
+ {"version":3,"file":"json.js","sources":["../../../../packages/utils/src/json.ts"],"sourcesContent":["import { read, utils, writeFile } from 'xlsx'\n\n/**\n * 将JSON数据导出为Excel文件\n * @param title - Excel文件的标题\n * @param json - JSON数据\n * @param merge - 合并单元格的配置\n * @returns 如果JSON数据为空,则返回undefined,否则返回Excel文件的名称\n */\nexport function JsonToExcel(title = '', json: (string | number)[][] = [], merge?: any) {\n try {\n if (!json.length) {\n return\n }\n // 创建worksheet\n const worksheet = utils.aoa_to_sheet(json)\n if (merge) {\n worksheet['!merges'] = merge\n }\n // 新建空workbook,加入worksheet\n const workbook = utils.book_new()\n utils.book_append_sheet(workbook, worksheet, '')\n writeFile(workbook, `${title}.xlsx`)\n }\n catch (e) {\n console.log('e: ', e)\n return new Error('数据导出失败')\n }\n}\n\n/**\n * 将Excel数据转换为JSON\n * @param file - Excel文件\n * @param cb - 转换完成后的回调函数\n * @param start - 开始行号\n */\nexport function excelToJson(file: File, cb: (json: any[]) => void, start: number): Promise<any[]> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader()\n reader.readAsArrayBuffer(file)\n reader.onload = (e) => {\n const data = e.target?.result\n const workbook = read(data, { type: 'binary' })\n // 遍历每张表读取\n const json = []\n for (const sheet in workbook.Sheets) {\n if (Object.prototype.hasOwnProperty.call(workbook.Sheets, sheet)) {\n let arr: string[][] = []\n const fromTo = workbook.Sheets[sheet]['!ref'] || ''\n const end = fromTo.split(':')\n const space = start + end[1].toString()\n arr = arr.concat(utils.sheet_to_json(workbook.Sheets[sheet], { header: 1, range: start ? space : fromTo }))\n const titleArr = arr[0]\n arr.shift()\n const excelJsonArr = arr.map((item) => {\n const obj: {\n [key: string]: any\n } = {}\n titleArr.forEach((titleItem: string, index: number) => {\n obj[titleItem] = item[index]\n })\n return obj\n })\n json.push(...excelJsonArr)\n }\n }\n if (cb) {\n cb(json)\n }\n resolve(json)\n }\n reader.onerror = (e) => {\n reject(e)\n }\n })\n}\n"],"names":["JsonToExcel","title","json","merge","worksheet","utils","workbook","writeFile","excelToJson","file","cb","start","resolve","reject","reader","e","data","_a","read","sheet","arr","fromTo","end","space","titleArr","excelJsonArr","item","obj","titleItem","index"],"mappings":"4HASO,SAASA,EAAYC,EAAQ,GAAIC,EAA8B,CAAA,EAAIC,EAAa,CACjF,GAAA,CACE,GAAA,CAACD,EAAK,OACR,OAGI,MAAAE,EAAYC,EAAAA,MAAM,aAAaH,CAAI,EACrCC,IACFC,EAAU,SAAS,EAAID,GAGnB,MAAAG,EAAWD,QAAM,SAAS,EAC1BA,EAAAA,MAAA,kBAAkBC,EAAUF,EAAW,EAAE,EACrCG,EAAAA,UAAAD,EAAU,GAAGL,CAAK,OAAO,QAE9B,EAAG,CACA,eAAA,IAAI,MAAO,CAAC,EACb,IAAI,MAAM,QAAQ,CAAA,CAE7B,CAQgB,SAAAO,EAAYC,EAAYC,EAA2BC,EAA+B,CAChG,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CAChC,MAAAC,EAAS,IAAI,WACnBA,EAAO,kBAAkBL,CAAI,EACtBK,EAAA,OAAUC,GAAM,OACf,MAAAC,GAAOC,EAAAF,EAAE,SAAF,YAAAE,EAAU,OACjBX,EAAWY,EAAAA,KAAKF,EAAM,CAAE,KAAM,SAAU,EAExCd,EAAO,CAAC,EACH,UAAAiB,KAASb,EAAS,OAC3B,GAAI,OAAO,UAAU,eAAe,KAAKA,EAAS,OAAQa,CAAK,EAAG,CAChE,IAAIC,EAAkB,CAAC,EACvB,MAAMC,EAASf,EAAS,OAAOa,CAAK,EAAE,MAAM,GAAK,GAC3CG,EAAMD,EAAO,MAAM,GAAG,EACtBE,EAAQZ,EAAQW,EAAI,CAAC,EAAE,SAAS,EACtCF,EAAMA,EAAI,OAAOf,EAAA,MAAM,cAAcC,EAAS,OAAOa,CAAK,EAAG,CAAE,OAAQ,EAAG,MAAOR,EAAQY,EAAQF,CAAA,CAAQ,CAAC,EACpG,MAAAG,EAAWJ,EAAI,CAAC,EACtBA,EAAI,MAAM,EACV,MAAMK,EAAeL,EAAI,IAAKM,GAAS,CACrC,MAAMC,EAEF,CAAC,EACI,OAAAH,EAAA,QAAQ,CAACI,EAAmBC,IAAkB,CACjDF,EAAAC,CAAS,EAAIF,EAAKG,CAAK,CAAA,CAC5B,EACMF,CAAA,CACR,EACIzB,EAAA,KAAK,GAAGuB,CAAY,CAAA,CAGzBf,GACFA,EAAGR,CAAI,EAETU,EAAQV,CAAI,CACd,EACOY,EAAA,QAAWC,GAAM,CACtBF,EAAOE,CAAC,CACV,CAAA,CACD,CACH"}
@@ -1,31 +1,26 @@
1
1
  declare class Storage {
2
2
  private readonly prefix;
3
- private constructor();
4
- static init(prefix?: string): Storage;
5
- static getInstance(): Storage;
6
- private getTopLevelDomain;
3
+ constructor(prefix?: string);
7
4
  local: {
8
- has: (key: string) => boolean;
9
- get: (key: string) => string | null;
10
- set: (key: string, value: string) => void;
11
- remove: (key: string) => void;
5
+ has: (key: string, usePrefix?: boolean) => boolean;
6
+ get: (key: string, usePrefix?: boolean) => string | null;
7
+ set: (key: string, value: string, usePrefix?: boolean) => void;
8
+ remove: (key: string, usePrefix?: boolean) => void;
12
9
  clear: () => void;
13
10
  };
14
11
  session: {
15
- has: (key: string) => boolean;
16
- get: (key: string) => string | null;
17
- set: (key: string, value: string) => void;
18
- remove: (key: string) => void;
12
+ has: (key: string, usePrefix?: boolean) => boolean;
13
+ get: (key: string, usePrefix?: boolean) => string | null;
14
+ set: (key: string, value: string, usePrefix?: boolean) => void;
15
+ remove: (key: string, usePrefix?: boolean) => void;
19
16
  clear: () => void;
20
17
  };
21
18
  cookie: {
22
- has: (key: string) => boolean;
23
- get: (key: string) => string | null;
24
- set: (key: string, value: string, expires?: number, path?: string, domain?: string) => void;
25
- remove: (key: string, path?: string, domain?: string) => void;
19
+ has: (key: string, usePrefix?: boolean) => boolean;
20
+ get: (key: string, usePrefix?: boolean) => string | null;
21
+ set: (key: string, value: string, expires?: number, path?: string, domain?: string, usePrefix?: boolean) => void;
22
+ remove: (key: string, path?: string, domain?: string, usePrefix?: boolean) => void;
26
23
  clear: () => void;
27
24
  };
28
25
  }
29
- export declare const initStorage: typeof Storage.init;
30
- export declare const useStorage: typeof Storage.getInstance;
31
- export {};
26
+ export { Storage };
@@ -1,2 +1,2 @@
1
- "use strict";var m=Object.defineProperty;var h=(r,e,t)=>e in r?m(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var n=(r,e,t)=>h(r,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});let o=null;class i{constructor(e){n(this,"prefix");n(this,"local",{has:e=>Object.prototype.hasOwnProperty.call(localStorage,`${this.prefix}${e}`),get:e=>localStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{localStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{localStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{localStorage.clear()}});n(this,"session",{has:e=>Object.prototype.hasOwnProperty.call(sessionStorage,`${this.prefix}${e}`),get:e=>sessionStorage.getItem(`${this.prefix}${e}`),set:(e,t)=>{sessionStorage.setItem(`${this.prefix}${e}`,t)},remove:e=>{sessionStorage.removeItem(`${this.prefix}${e}`)},clear:()=>{sessionStorage.clear()}});n(this,"cookie",{has:e=>new RegExp(`(^|;)\\s*${e}=`).test(document.cookie),get:e=>{const t=document.cookie.match(new RegExp(`(^|;)\\s*${e}=([^;]*)`));return t?decodeURIComponent(t[2]):null},set:(e,t,a=1,l="/",c=this.getTopLevelDomain())=>{const s=new Date;s.setTime(s.getTime()+a*24*60*60*1e3);const p=`;expires=${s.toUTCString()}`,$=`;path=${l}`,g=c?`;domain=${c}`:"";document.cookie=`${e}=${encodeURIComponent(t)}${p}${$}${g}`},remove:(e,t="/",a=this.getTopLevelDomain())=>{const l=`;expires=${new Date(0).toUTCString()}`,c=`;path=${t}`,s=a?`;domain=${a}`:"";document.cookie=`${e}=;${l}${c}${s}`},clear:()=>{const e=document.cookie.match(/[^ =;]+(?==)/g);e&&e.forEach(t=>{document.cookie=`${t}=;expires=${new Date(0).toUTCString()};path=/`})}});this.prefix=e}static init(e="qxs_"){return o?(console.warn("Storage has already been initialized"),o):(o=new i(e),o)}static getInstance(){return o||(o=new i("qxs_")),o}getTopLevelDomain(e=window.location.hostname){const t=e.split(".");return t.length>2?t.slice(-2).join("."):e}}const u=i.init,S=i.getInstance;exports.initStorage=u;exports.useStorage=S;
1
+ "use strict";var h=Object.defineProperty;var l=(s,e,t)=>e in s?h(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var n=(s,e,t)=>l(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});class m{constructor(e="qxs_"){n(this,"prefix");n(this,"local",{has:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;return Object.prototype.hasOwnProperty.call(localStorage,o)},get:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;return localStorage.getItem(o)},set:(e,t,o=!0)=>{const r=o?`${this.prefix}${e}`:e;localStorage.setItem(r,t)},remove:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;localStorage.removeItem(o)},clear:()=>{localStorage.clear()}});n(this,"session",{has:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;return Object.prototype.hasOwnProperty.call(sessionStorage,o)},get:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;return sessionStorage.getItem(o)},set:(e,t,o=!0)=>{const r=o?`${this.prefix}${e}`:e;sessionStorage.setItem(r,t)},remove:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;sessionStorage.removeItem(o)},clear:()=>{sessionStorage.clear()}});n(this,"cookie",{has:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e;return new RegExp(`(^|;)\\s*${o}=`).test(document.cookie)},get:(e,t=!0)=>{const o=t?`${this.prefix}${e}`:e,r=document.cookie.match(new RegExp(`(^|;)\\s*${o}=([^;]*)`));return r?decodeURIComponent(r[2]):null},set:(e,t,o=1,r="/",c=window.location.hostname,a=!0)=>{const p=a?`${this.prefix}${e}`:e,i=new Date;i.setTime(i.getTime()+o*24*60*60*1e3);const $=`;expires=${i.toUTCString()}`,x=`;path=${r}`,f=c?`;domain=${c}`:"";document.cookie=`${p}=${encodeURIComponent(t)}${$}${x}${f}`},remove:(e,t="/",o=window.location.hostname,r=!0)=>{const c=r?`${this.prefix}${e}`:e,a=`;expires=${new Date(0).toUTCString()}`,p=`;path=${t}`,i=o?`;domain=${o}`:"";document.cookie=`${c}=;${a}${p}${i}`},clear:()=>{const e=document.cookie.match(/[^ =;]+(?==)/g);e&&e.forEach(t=>{document.cookie=`${t}=;expires=${new Date(0).toUTCString()};path=/`})}});this.prefix=e}}exports.Storage=m;
2
2
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sources":["../../../../packages/utils/src/storage.ts"],"sourcesContent":["// 使用单例模式\nlet instance: Storage | null = null\n\nclass Storage {\n private readonly prefix: string\n\n private constructor(prefix: string) {\n this.prefix = prefix\n }\n\n static init(prefix = 'qxs_'): Storage {\n if (instance) {\n // throw new Error('Storage has already been initialized')\n console.warn('Storage has already been initialized')\n return instance\n }\n instance = new Storage(prefix)\n return instance\n }\n\n static getInstance(): Storage {\n if (!instance) {\n instance = new Storage('qxs_') // 使用默认前缀\n }\n return instance\n }\n\n private getTopLevelDomain(hostname = window.location.hostname) {\n const parts = hostname.split('.')\n if (parts.length > 2) {\n return parts.slice(-2).join('.')\n }\n return hostname\n }\n\n local = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(localStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return localStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n localStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n localStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n localStorage.clear()\n },\n }\n\n session = {\n has: (key: string) => {\n return Object.prototype.hasOwnProperty.call(sessionStorage, `${this.prefix}${key}`)\n },\n get: (key: string) => {\n return sessionStorage.getItem(`${this.prefix}${key}`)\n },\n set: (key: string, value: string) => {\n sessionStorage.setItem(`${this.prefix}${key}`, value)\n },\n remove: (key: string) => {\n sessionStorage.removeItem(`${this.prefix}${key}`)\n },\n clear: () => {\n sessionStorage.clear()\n },\n }\n\n cookie = {\n has: (key: string) => {\n return new RegExp(`(^|;)\\\\s*${key}=`).test(document.cookie)\n },\n\n get: (key: string) => {\n const match = document.cookie.match(new RegExp(`(^|;)\\\\s*${key}=([^;]*)`))\n return match ? decodeURIComponent(match[2]) : null\n },\n\n set: (key: string, value: string, expires = 1, path = '/', domain = this.getTopLevelDomain()) => {\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 = `${key}=${encodeURIComponent(value)}${expiresStr}${pathStr}${domainStr}`\n },\n\n remove: (key: string, path = '/', domain = this.getTopLevelDomain()) => {\n // 如果设置了域,那么确保域和路径与设置cookie时相同,以确保删除成功\n const expiresStr = `;expires=${new Date(0).toUTCString()}`\n const pathStr = `;path=${path}`\n const domainStr = domain ? `;domain=${domain}` : ''\n\n document.cookie = `${key}=;${expiresStr}${pathStr}${domainStr}`\n },\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// 导出两个方法\nexport const initStorage = Storage.init\nexport const useStorage = Storage.getInstance\n"],"names":["instance","Storage","prefix","__publicField","key","value","match","expires","path","domain","expiresDate","expiresStr","pathStr","domainStr","keys","hostname","parts","initStorage","useStorage"],"mappings":"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"}
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","prefix","__publicField","key","usePrefix","prefixedKey","value","match","expires","path","domain","expiresDate","expiresStr","pathStr","domainStr","keys"],"mappings":"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"}
@@ -18,3 +18,9 @@ export declare function isJSONString(str: string): boolean;
18
18
  * isImageByMimeType(file); // true
19
19
  */
20
20
  export declare function isImageByMimeType(file: File): boolean;
21
+ /**
22
+ * 判断一个值是否为普通对象
23
+ * @param value - 要判断的值
24
+ * @returns 如果值是普通对象,则返回 true,否则返回 false
25
+ */
26
+ export declare function isPlainObject(value: unknown): value is Record<string, any>;
package/lib/src/types.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=e=>e===void 0,i=e=>typeof e=="boolean",r=e=>typeof e=="number";function s(e){return typeof Element>"u"?!1:e instanceof Element}function o(e){return e===window}function u(e){return/^[\],:{}\s]*$/.test(e.replace(/\\["\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))&&l(e)}function l(e){try{return JSON.parse(e),!0}catch(n){return console.log("e: ",n),!1}}function a(e){return e.type.startsWith("image/")}exports.isBoolean=i;exports.isElement=s;exports.isImageByMimeType=a;exports.isJSONString=u;exports.isNumber=r;exports.isUndefined=t;exports.isWindow=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=e=>e===void 0,i=e=>typeof e=="boolean",o=e=>typeof e=="number";function r(e){return typeof Element>"u"?!1:e instanceof Element}function s(e){return e===window}function l(e){return/^[\],:{}\s]*$/.test(e.replace(/\\["\\/bfnrtu]/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))&&u(e)}function u(e){try{return JSON.parse(e),!0}catch(n){return console.log("e: ",n),!1}}function c(e){return e.type.startsWith("image/")}function f(e){if(e===null||typeof e!="object")return!1;const n=Object.getPrototypeOf(e);return n===null||n===Object.prototype}exports.isBoolean=i;exports.isElement=r;exports.isImageByMimeType=c;exports.isJSONString=l;exports.isNumber=o;exports.isPlainObject=f;exports.isUndefined=t;exports.isWindow=s;
2
2
  //# sourceMappingURL=types.js.map
@@ -1 +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"],"names":["isUndefined","val","isBoolean","isNumber","isElement","isWindow","isJSONString","str","isValidJSON","e","isImageByMimeType","file"],"mappings":"gFAAa,MAAAA,EAAeC,GAA+BA,IAAQ,OACtDC,EAAaD,GAA6B,OAAOA,GAAQ,UACzDE,EAAYF,GAA4B,OAAOA,GAAQ,SAE7D,SAASG,EAAU,EAA0B,CAC9C,OAAA,OAAO,QAAY,IACd,GAEF,aAAa,OACtB,CAEO,SAASC,EAASJ,EAA6B,CACpD,OAAOA,IAAQ,MACjB,CAOO,SAASK,EAAaC,EAAa,CAMjC,MALiB,gBACrB,KAAKA,EAAI,QAAQ,kBAAmB,GAAG,EACrC,QAAQ,mEAAoE,GAAG,EAC/E,QAAQ,uBAAwB,EAAE,CAAC,GAEdC,EAAYD,CAAG,CAC3C,CAOA,SAASC,EAAYD,EAAa,CAC5B,GAAA,CACF,YAAK,MAAMA,CAAG,EACP,SAEFE,EAAG,CACA,eAAA,IAAI,MAAOA,CAAC,EACb,EAAA,CAEX,CAUO,SAASC,EAAkBC,EAAY,CACrC,OAAAA,EAAK,KAAK,WAAW,QAAQ,CACtC"}
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","isWindow","isJSONString","str","isValidJSON","e","isImageByMimeType","file","isPlainObject","value","proto"],"mappings":"gFAAa,MAAAA,EAAeC,GAA+BA,IAAQ,OACtDC,EAAaD,GAA6B,OAAOA,GAAQ,UACzDE,EAAYF,GAA4B,OAAOA,GAAQ,SAE7D,SAASG,EAAU,EAA0B,CAC9C,OAAA,OAAO,QAAY,IACd,GAEF,aAAa,OACtB,CAEO,SAASC,EAASJ,EAA6B,CACpD,OAAOA,IAAQ,MACjB,CAOO,SAASK,EAAaC,EAAa,CAMjC,MALiB,gBACrB,KAAKA,EAAI,QAAQ,kBAAmB,GAAG,EACrC,QAAQ,mEAAoE,GAAG,EAC/E,QAAQ,uBAAwB,EAAE,CAAC,GAEdC,EAAYD,CAAG,CAC3C,CAOA,SAASC,EAAYD,EAAa,CAC5B,GAAA,CACF,YAAK,MAAMA,CAAG,EACP,SAEFE,EAAG,CACA,eAAA,IAAI,MAAOA,CAAC,EACb,EAAA,CAEX,CAUO,SAASC,EAAkBC,EAAY,CACrC,OAAAA,EAAK,KAAK,WAAW,QAAQ,CACtC,CAOO,SAASC,EAAcC,EAA8C,CAC1E,GAAIA,IAAU,MAAQ,OAAOA,GAAU,SAC9B,MAAA,GAIH,MAAAC,EAAQ,OAAO,eAAeD,CAAK,EAIlC,OAAAC,IAAU,MAAQA,IAAU,OAAO,SAC5C"}
@@ -0,0 +1,47 @@
1
+ import { AxiosInstance, AxiosRequestConfig, AxiosStatic } from 'axios';
2
+
3
+ export interface SuccessResponse<T> {
4
+ code: number;
5
+ count: number;
6
+ data: T;
7
+ message: string;
8
+ }
9
+ export interface ErrorResponse {
10
+ code: number;
11
+ data: null;
12
+ message: string;
13
+ }
14
+ export interface UseApiResponse<W extends boolean = false, T = unknown> {
15
+ res: W extends true ? SuccessResponse<T> : T;
16
+ error: ErrorResponse | null;
17
+ }
18
+ export interface UrlObjectType {
19
+ url: string;
20
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
21
+ proxyPrefix?: string;
22
+ }
23
+ export type ApiTypeMap<U extends UrlObjectType> = {
24
+ [K in U['url']]: {
25
+ request: any;
26
+ response: any;
27
+ };
28
+ };
29
+ type RequestPayload<T> = T extends {
30
+ data: any;
31
+ } ? T['data'] : T;
32
+ type RequestParams<T> = T extends {
33
+ params: any;
34
+ } ? T['params'] : T;
35
+ export declare class ApiService<T extends ApiTypeMap<U>, U extends UrlObjectType> {
36
+ private apiInstance;
37
+ private axiosInstance;
38
+ private static instance;
39
+ constructor(apiInstance: AxiosInstance, axiosInstance: AxiosStatic);
40
+ private isBusinessError;
41
+ private isAxiosResponse;
42
+ private isErrorResponse;
43
+ useApi: <K extends U, W extends boolean = false>(axiosConfig: Omit<AxiosRequestConfig<RequestPayload<T[K["url"]]["request"]>>, "params"> & K & {
44
+ params?: RequestParams<T[K["url"]]["request"]>;
45
+ }, params?: RequestParams<T[K["url"]]["request"]>, isWholeResponse?: W) => Promise<UseApiResponse<W, T[K["url"]]["response"]>>;
46
+ }
47
+ export {};
@@ -0,0 +1,2 @@
1
+ "use strict";var f=Object.defineProperty;var l=(r,s,e)=>s in r?f(r,s,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[s]=e;var a=(r,s,e)=>l(r,typeof s!="symbol"?s+"":s,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./types.js"),i=class i{constructor(s,e){a(this,"useApi",async(s,e,u)=>{let d=null,o=null;try{const t={...s,...["GET"].includes(s.method.toUpperCase())?{params:e}:{data:e}};t.url=(t.proxyPrefix||"")+s.url,delete t.proxyPrefix;const n=await this.apiInstance(t);d=u?n.data:n.data.data}catch(t){if(this.axiosInstance.isAxiosError(t)){const{statusText:n="",status:h}=t.response||{};console.log(n?`${n}:${h}`:JSON.stringify(t))}else this.isAxiosResponse(t)?o=t.data:this.isErrorResponse(t)&&(o=t)}return{res:d,error:o}});if(this.apiInstance=s,this.axiosInstance=e,i.instance)return i.instance;i.instance=this}isBusinessError(s){return p.isPlainObject(s)&&typeof s.message=="string"&&typeof s.code=="number"&&s.code!==0}isAxiosResponse(s){return p.isPlainObject(s)&&s.data!==void 0&&this.isBusinessError(s.data)&&s.status!==void 0&&s.statusText!==void 0&&s.headers!==void 0&&s.config!==void 0&&s.request!==void 0}isErrorResponse(s){return"code"in s&&"data"in s&&"message"in s&&s.code!==0}};a(i,"instance");let c=i;exports.ApiService=c;
2
+ //# 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, AxiosStatic } 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 private axiosInstance: AxiosStatic,\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) {\n if (this.axiosInstance.isAxiosError(err)) {\n const { statusText = '', status } = err.response || {}\n console.log(statusText ? `${statusText}:${status}` : JSON.stringify(err))\n }\n else if (this.isAxiosResponse(err)) {\n error = err.data\n }\n else if (this.isErrorResponse(err)) {\n error = err\n }\n }\n\n return { res: res!, error }\n }\n}\n"],"names":["_ApiService","apiInstance","axiosInstance","__publicField","axiosConfig","params","isWholeResponse","res","error","config","response","err","statusText","status","obj","isPlainObject","value","ApiService"],"mappings":"kRAqCaA,EAAN,MAAMA,CAGX,CAGA,YACUC,EACAC,EACR,CA6BKC,EAAA,cAAS,MAIdC,EAGAC,EACAC,IACwD,CACxD,IAAIC,EAAgE,KAChEC,EAAiC,KAEjC,GAAA,CACF,MAAMC,EAAS,CACb,GAAGL,EACH,GAAI,CAAC,KAAK,EAAE,SAASA,EAAY,OAAO,YAAa,CAAA,EAAI,CAAE,OAAAC,GAAW,CAAE,KAAMA,CAAO,CACvF,EAEAI,EAAO,KAAOA,EAAO,aAAe,IAAML,EAAY,IACtD,OAAOK,EAAO,YAEd,MAAMC,EAAW,MAAM,KAAK,YAAsDD,CAAM,EACxFF,EAAMD,EACFI,EAAS,KACTA,EAAS,KAAK,WAEbC,EAAK,CACV,GAAI,KAAK,cAAc,aAAaA,CAAG,EAAG,CACxC,KAAM,CAAE,WAAAC,EAAa,GAAI,OAAAC,GAAWF,EAAI,UAAY,CAAC,EAC7C,QAAA,IAAIC,EAAa,GAAGA,CAAU,IAAIC,CAAM,GAAK,KAAK,UAAUF,CAAG,CAAC,CAEjE,MAAA,KAAK,gBAAgBA,CAAG,EAC/BH,EAAQG,EAAI,KAEL,KAAK,gBAAgBA,CAAG,IACvBH,EAAAG,EACV,CAGK,MAAA,CAAE,IAAAJ,EAAW,MAAAC,CAAM,CAC5B,GArEE,GAHQ,KAAA,YAAAP,EACA,KAAA,cAAAC,EAEJF,EAAW,SACb,OAAOA,EAAW,SAEpBA,EAAW,SAAW,IAAA,CAGhB,gBAAgBc,EAA6B,CACnD,OAAOC,EAAc,cAAAD,CAAG,GACnB,OAAOA,EAAI,SAAY,UACvB,OAAOA,EAAI,MAAS,UACpBA,EAAI,OAAS,CAAA,CAGZ,gBAAgBE,EAAoC,CACnD,OAAAD,EAAA,cAAcC,CAAK,GACrBA,EAAM,OAAS,QACf,KAAK,gBAAgBA,EAAM,IAAI,GAC/BA,EAAM,SAAW,QACjBA,EAAM,aAAe,QACrBA,EAAM,UAAY,QAClBA,EAAM,SAAW,QACjBA,EAAM,UAAY,MAAA,CAGjB,gBAAgBA,EAAoC,CAC1D,MAAO,SAAUA,GAAS,SAAUA,GAAS,YAAaA,GAASA,EAAM,OAAS,CAAA,CA6CtF,EA5EEb,EAJWH,EAII,YAJV,IAAMiB,EAANjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qxs-bns/utils",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "main": "lib/index.js",
5
5
  "module": "es/index.mjs",
6
6
  "types": "es/index.d.ts",
@@ -32,6 +32,7 @@
32
32
  "xlsx": "^0.18.5"
33
33
  },
34
34
  "devDependencies": {
35
- "@types/ali-oss": "^6.16.11"
35
+ "@types/ali-oss": "^6.16.11",
36
+ "axios": "^1.7.9"
36
37
  }
37
38
  }