qidian-shared 1.0.39 → 1.0.40

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/dist/index.mjs CHANGED
@@ -15,13 +15,14 @@ import { easyDownload } from "./utils/download.mjs";
15
15
  import { b2mb, cutFileSuffix, cutFilename, isTypeByName } from "./utils/file.mjs";
16
16
  import { decrypt, encrypt } from "./utils/jsencrypt.mjs";
17
17
  import { parseRelaxedJSON } from "./utils/json.mjs";
18
- import { suspectedWrapperPromise, to, waitTime } from "./utils/promise.mjs";
18
+ import { abortWrapper, suspectedWrapperPromise, to, waitTime } from "./utils/promise.mjs";
19
19
  import { camelize, initialConversion, kebabCase } from "./utils/str.mjs";
20
20
  import { identifyType, isFunction, isObject, isPromise, objToStr, toTypeStr } from "./utils/type.mjs";
21
21
  import { deleteUrlParams, getUrlParam, getUrlParams, setUrlParam } from "./utils/url.mjs";
22
22
  import { validator, validatorRegs } from "./utils/validator.mjs";
23
23
  export {
24
24
  MD5,
25
+ abortWrapper,
25
26
  b2mb,
26
27
  buildTree,
27
28
  camelize,
@@ -1,3 +1,7 @@
1
1
  export declare function to<T, U = Error>(promise: Promise<T>, errorExt?: object): Promise<[U, undefined] | [null, T]>;
2
2
  export declare function suspectedWrapperPromise<T, U = Error>(p: T | Promise<T>): Promise<[U, undefined] | [null, T]>;
3
+ export interface AbortWrapperPromise<T = any> extends Promise<T> {
4
+ abort?: (reasonToAbort: any) => void;
5
+ }
6
+ export declare function abortWrapper<T>(p1: Promise<T>): AbortWrapperPromise<T>;
3
7
  export declare function waitTime(time: number): Promise<void>;
@@ -17,12 +17,20 @@ async function suspectedWrapperPromise(p) {
17
17
  return [null, p];
18
18
  }
19
19
  }
20
+ function abortWrapper(p1) {
21
+ let abort;
22
+ const p2 = new Promise((resolve, reject) => abort = reject);
23
+ const p = Promise.race([p1, p2]);
24
+ p.abort = abort;
25
+ return p;
26
+ }
20
27
  function waitTime(time) {
21
28
  return new Promise((resolve) => {
22
29
  setTimeout(resolve, time);
23
30
  });
24
31
  }
25
32
  export {
33
+ abortWrapper,
26
34
  suspectedWrapperPromise,
27
35
  to,
28
36
  waitTime
@@ -1 +1 @@
1
- {"version":3,"file":"promise.mjs","sources":["../../src/utils/promise.ts"],"sourcesContent":["import { isPromise } from './type'\n\n/**\n * https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/\n * @param promise\n * @param errorExt 你可以传递给 err 对象的附加信息\n * @returns [err, res]\n */\nexport function to<T, U = Error>(\n promise: Promise<T>,\n errorExt?: object\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt }\n return [parsedError, undefined]\n }\n\n return [err ?? (true as U), undefined]\n })\n}\n\n/**\n * 疑似Promise包装器\n * @param promise\n */\nexport async function suspectedWrapperPromise<T, U = Error>(\n p: T | Promise<T>\n): Promise<[U, undefined] | [null, T]> {\n if (isPromise(p)) {\n const [err, res] = await to<T, U>(p as Promise<T>)\n if (err) return [err, undefined]\n\n return [null, res as T]\n } else {\n return [null, p]\n }\n}\n\n/**\n * 等待\n * @param time 毫秒\n */\nexport function waitTime(time: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, time)\n })\n}\n"],"names":[],"mappings":";AAQO,SAAS,GACd,SACA,UACqC;AACrC,SAAO,QACJ,KAAgB,CAAC,SAAY,CAAC,MAAM,IAAI,CAAC,EACzC,MAAsB,CAAC,QAAW;AACjC,QAAI,UAAU;AACZ,YAAM,cAAc,EAAE,GAAG,KAAK,GAAG,SAAA;AACjC,aAAO,CAAC,aAAa,MAAS;AAAA,IAChC;AAEA,WAAO,CAAC,OAAQ,MAAY,MAAS;AAAA,EACvC,CAAC;AACL;AAMA,eAAsB,wBACpB,GACqC;AACrC,MAAI,UAAU,CAAC,GAAG;AAChB,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,GAAS,CAAe;AACjD,QAAI,IAAK,QAAO,CAAC,KAAK,MAAS;AAE/B,WAAO,CAAC,MAAM,GAAQ;AAAA,EACxB,OAAO;AACL,WAAO,CAAC,MAAM,CAAC;AAAA,EACjB;AACF;AAMO,SAAS,SAAS,MAAc;AACrC,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,eAAW,SAAS,IAAI;AAAA,EAC1B,CAAC;AACH;"}
1
+ {"version":3,"file":"promise.mjs","sources":["../../src/utils/promise.ts"],"sourcesContent":["import { isPromise } from './type'\n\n/**\n * https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/\n * @param promise\n * @param errorExt 你可以传递给 err 对象的附加信息\n * @returns [err, res]\n */\nexport function to<T, U = Error>(\n promise: Promise<T>,\n errorExt?: object\n): Promise<[U, undefined] | [null, T]> {\n return promise\n .then<[null, T]>((data: T) => [null, data])\n .catch<[U, undefined]>((err: U) => {\n if (errorExt) {\n const parsedError = { ...err, ...errorExt }\n return [parsedError, undefined]\n }\n\n return [err ?? (true as U), undefined]\n })\n}\n\n/**\n * 疑似Promise包装器\n * @param promise\n */\nexport async function suspectedWrapperPromise<T, U = Error>(\n p: T | Promise<T>\n): Promise<[U, undefined] | [null, T]> {\n if (isPromise(p)) {\n const [err, res] = await to<T, U>(p as Promise<T>)\n if (err) return [err, undefined]\n\n return [null, res as T]\n } else {\n return [null, p]\n }\n}\n\n/**\n * 中止包装器\n * @param {promise} p1\n * @return {promise}\n */\nexport interface AbortWrapperPromise<T = any> extends Promise<T> {\n abort?: (reasonToAbort: any) => void\n}\nexport function abortWrapper<T>(p1: Promise<T>) {\n let abort\n const p2 = new Promise((resolve, reject) => (abort = reject))\n const p = Promise.race([p1, p2]) as AbortWrapperPromise<T>\n p.abort = abort\n return p\n}\n\n/**\n * 等待\n * @param time 毫秒\n */\nexport function waitTime(time: number) {\n return new Promise<void>((resolve) => {\n setTimeout(resolve, time)\n })\n}\n"],"names":[],"mappings":";AAQO,SAAS,GACd,SACA,UACqC;AACrC,SAAO,QACJ,KAAgB,CAAC,SAAY,CAAC,MAAM,IAAI,CAAC,EACzC,MAAsB,CAAC,QAAW;AACjC,QAAI,UAAU;AACZ,YAAM,cAAc,EAAE,GAAG,KAAK,GAAG,SAAA;AACjC,aAAO,CAAC,aAAa,MAAS;AAAA,IAChC;AAEA,WAAO,CAAC,OAAQ,MAAY,MAAS;AAAA,EACvC,CAAC;AACL;AAMA,eAAsB,wBACpB,GACqC;AACrC,MAAI,UAAU,CAAC,GAAG;AAChB,UAAM,CAAC,KAAK,GAAG,IAAI,MAAM,GAAS,CAAe;AACjD,QAAI,IAAK,QAAO,CAAC,KAAK,MAAS;AAE/B,WAAO,CAAC,MAAM,GAAQ;AAAA,EACxB,OAAO;AACL,WAAO,CAAC,MAAM,CAAC;AAAA,EACjB;AACF;AAUO,SAAS,aAAgB,IAAgB;AAC9C,MAAI;AACJ,QAAM,KAAK,IAAI,QAAQ,CAAC,SAAS,WAAY,QAAQ,MAAO;AAC5D,QAAM,IAAI,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;AAC/B,IAAE,QAAQ;AACV,SAAO;AACT;AAMO,SAAS,SAAS,MAAc;AACrC,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,eAAW,SAAS,IAAI;AAAA,EAC1B,CAAC;AACH;"}
@@ -3,4 +3,4 @@ export declare const validatorRegs: {
3
3
  telephone: RegExp;
4
4
  url: RegExp;
5
5
  };
6
- export declare function validator(value: string, type: keyof typeof validatorRegs | 'empty', required?: boolean): boolean | null;
6
+ export declare function validator(value: string | number | undefined | null, type: keyof typeof validatorRegs | 'empty', required?: boolean): boolean | null;
@@ -9,7 +9,7 @@ function validator(value, type, required = false) {
9
9
  const reg = validatorRegs[type];
10
10
  if (!reg) throw new Error(`[validator] 没有 ${type} 类型`);
11
11
  if (required && isEmpty(value)) return null;
12
- return reg.test(value);
12
+ return isEmpty(value) ? false : reg.test(value + "");
13
13
  }
14
14
  export {
15
15
  validator,
@@ -1 +1 @@
1
- {"version":3,"file":"validator.mjs","sources":["../../src/utils/validator.ts"],"sourcesContent":["import { isEmpty } from './common'\n\nexport const validatorRegs = {\n cellPhone: /^1[3-9]\\d{9}$/,\n telephone: /^\\d{7,8}$/,\n url: /^((blob:)*(https|http|ftp|rtsp|mms|wss)?:\\/\\/)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/\n}\n\n/**\n * 验证器函数 - 检查输入值是否符合指定规则\n * @param value 要验证的字符串值\n * @param type 验证类型\n * @param required 是否必填,必填时空值返回 null\n * @returns 验证结果:通过返回 true,失败返回 false,必填为空返回 null\n * @throws Error 当传入不支持的验证类型时抛出异常\n */\nexport function validator(\n value: string,\n type: keyof typeof validatorRegs | 'empty',\n required = false\n) {\n if (type === 'empty') return isEmpty(value)\n\n const reg = validatorRegs[type]\n if (!reg) throw new Error(`[validator] 没有 ${type} 类型`)\n if (required && isEmpty(value)) return null\n\n return reg.test(value)\n}\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AACP;AAUO,SAAS,UACd,OACA,MACA,WAAW,OACX;AACA,MAAI,SAAS,QAAS,QAAO,QAAQ,KAAK;AAE1C,QAAM,MAAM,cAAc,IAAI;AAC9B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kBAAkB,IAAI,KAAK;AACrD,MAAI,YAAY,QAAQ,KAAK,EAAG,QAAO;AAEvC,SAAO,IAAI,KAAK,KAAK;AACvB;"}
1
+ {"version":3,"file":"validator.mjs","sources":["../../src/utils/validator.ts"],"sourcesContent":["import { isEmpty } from './common'\n\nexport const validatorRegs = {\n cellPhone: /^1[3-9]\\d{9}$/,\n telephone: /^\\d{7,8}$/,\n url: /^((blob:)*(https|http|ftp|rtsp|mms|wss)?:\\/\\/)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/\n}\n\n/**\n * 验证器函数 - 检查输入值是否符合指定规则\n * @param value 要验证的字符串值\n * @param type 验证类型\n * @param required 是否必填,必填时空值返回 null\n * @returns 验证结果:通过返回 true,失败返回 false,必填为空返回 null\n * @throws Error 当传入不支持的验证类型时抛出异常\n */\nexport function validator(\n value: string | number | undefined | null,\n type: keyof typeof validatorRegs | 'empty',\n required = false\n) {\n if (type === 'empty') return isEmpty(value)\n\n const reg = validatorRegs[type]\n if (!reg) throw new Error(`[validator] 没有 ${type} 类型`)\n if (required && isEmpty(value)) return null\n\n return isEmpty(value) ? false : reg.test(value + '')\n}\n"],"names":[],"mappings":";AAEO,MAAM,gBAAgB;AAAA,EAC3B,WAAW;AAAA,EACX,WAAW;AAAA,EACX,KAAK;AACP;AAUO,SAAS,UACd,OACA,MACA,WAAW,OACX;AACA,MAAI,SAAS,QAAS,QAAO,QAAQ,KAAK;AAE1C,QAAM,MAAM,cAAc,IAAI;AAC9B,MAAI,CAAC,IAAK,OAAM,IAAI,MAAM,kBAAkB,IAAI,KAAK;AACrD,MAAI,YAAY,QAAQ,KAAK,EAAG,QAAO;AAEvC,SAAO,QAAQ,KAAK,IAAI,QAAQ,IAAI,KAAK,QAAQ,EAAE;AACrD;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qidian-shared",
3
- "version": "1.0.39",
3
+ "version": "1.0.40",
4
4
  "description": "QiDian 共享工具函数和钩子",
5
5
  "type": "module",
6
6
  "author": "qidian",