@ybgnb/utils 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/dist/common/error.d.ts +4 -4
  2. package/dist/common/error.d.ts.map +1 -1
  3. package/dist/index.d.ts +22 -8
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +333 -8
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.umd.cjs +2 -0
  8. package/dist/index.umd.cjs.map +1 -0
  9. package/dist/types/github.d.ts +10 -0
  10. package/dist/types/github.d.ts.map +1 -0
  11. package/dist/types/{type-helpers.d.ts → helpers.d.ts} +1 -1
  12. package/dist/types/helpers.d.ts.map +1 -0
  13. package/dist/types/network.d.ts +16 -0
  14. package/dist/types/network.d.ts.map +1 -0
  15. package/dist/types/physical.d.ts +17 -0
  16. package/dist/types/physical.d.ts.map +1 -0
  17. package/dist/types/utl.d.ts +8 -0
  18. package/dist/types/utl.d.ts.map +1 -0
  19. package/dist/utils/array.d.ts +13 -0
  20. package/dist/utils/array.d.ts.map +1 -0
  21. package/dist/utils/dom/color.d.ts +33 -0
  22. package/dist/utils/dom/color.d.ts.map +1 -0
  23. package/dist/utils/dom/css.d.ts +5 -0
  24. package/dist/utils/dom/css.d.ts.map +1 -0
  25. package/dist/utils/dom/img.d.ts +15 -0
  26. package/dist/utils/dom/img.d.ts.map +1 -0
  27. package/dist/utils/{dom.d.ts → dom/page.d.ts} +2 -1
  28. package/dist/utils/dom/page.d.ts.map +1 -0
  29. package/dist/utils/dom/scroll.d.ts +14 -0
  30. package/dist/utils/dom/scroll.d.ts.map +1 -0
  31. package/dist/utils/error.d.ts +1 -1
  32. package/dist/utils/error.d.ts.map +1 -1
  33. package/dist/utils/github.d.ts +7 -0
  34. package/dist/utils/github.d.ts.map +1 -0
  35. package/dist/utils/id.d.ts +5 -0
  36. package/dist/utils/id.d.ts.map +1 -0
  37. package/dist/utils/network.d.ts +3 -15
  38. package/dist/utils/network.d.ts.map +1 -1
  39. package/dist/utils/sleep.d.ts +14 -0
  40. package/dist/utils/sleep.d.ts.map +1 -0
  41. package/dist/utils/time.d.ts.map +1 -1
  42. package/dist/utils/url.d.ts +30 -0
  43. package/dist/utils/url.d.ts.map +1 -0
  44. package/package.json +22 -6
  45. package/dist/common/biz-result.js +0 -42
  46. package/dist/common/biz-result.js.map +0 -1
  47. package/dist/common/error.js +0 -19
  48. package/dist/common/error.js.map +0 -1
  49. package/dist/types/type-helpers.d.ts.map +0 -1
  50. package/dist/types/type-helpers.js +0 -3
  51. package/dist/types/type-helpers.js.map +0 -1
  52. package/dist/utils/dom.d.ts.map +0 -1
  53. package/dist/utils/dom.js +0 -36
  54. package/dist/utils/dom.js.map +0 -1
  55. package/dist/utils/error.js +0 -46
  56. package/dist/utils/error.js.map +0 -1
  57. package/dist/utils/function.js +0 -41
  58. package/dist/utils/function.js.map +0 -1
  59. package/dist/utils/network.js +0 -48
  60. package/dist/utils/network.js.map +0 -1
  61. package/dist/utils/random.js +0 -53
  62. package/dist/utils/random.js.map +0 -1
  63. package/dist/utils/time.js +0 -16
  64. package/dist/utils/time.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ /**
2
+ * 物理像素的区域数据
3
+ */
4
+ export interface PhysicalRect {
5
+ x: number;
6
+ y: number;
7
+ width: number;
8
+ height: number;
9
+ }
10
+ /**
11
+ * 物理像素的点位
12
+ */
13
+ export interface PhysicalPoint {
14
+ x: number;
15
+ y: number;
16
+ }
17
+ //# sourceMappingURL=physical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical.d.ts","sourceRoot":"","sources":["../../src/types/physical.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 已解析的 url
3
+ */
4
+ export interface ParsedUrl {
5
+ baseUrl: string;
6
+ searchParams: URLSearchParams;
7
+ }
8
+ //# sourceMappingURL=utl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utl.d.ts","sourceRoot":"","sources":["../../src/types/utl.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,eAAe,CAAA;CAC9B"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 是否为空数组
3
+ * @param data
4
+ */
5
+ export declare function isEmptyArr(data: unknown): boolean;
6
+ /**
7
+ * 将数组分块为指定大小的多个子数组
8
+ * @param arr 原数组
9
+ * @param size 每个块的长度
10
+ * @example chunk([1,2,3,4,5], 2) => [[1,2],[3,4],[5]]
11
+ */
12
+ export declare function chunk<T>(arr: T[], size: number): T[][];
13
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/utils/array.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,WAEvC;AAED;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAOtD"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * 生成 CSS `color-mix()` 函数的字符串表示,用于动态计算两种颜色的混合结果
3
+ *
4
+ * @param {string} color1 - 参与混合的第一种颜色(支持 CSS 合法颜色值,如 HEX、RGB、HSL 等)
5
+ * @param {string} color2 - 参与混合的第二种颜色
6
+ * @param {number} percentage - 主颜色(color1)在混合中的占比(百分比数值,范围 0-100)
7
+ * @param {'srgb' | 'hsl'} [colorSpace='srgb'] - 色彩空间选项:
8
+ * - `'srgb'`: 标准 RGB 色彩空间(默认)
9
+ * - `'hsl'`: 色相-饱和度-明度色彩空间
10
+ * @param {number} [percentage2] - 可选参数:副颜色(color2)的独立占比。
11
+ * 若未提供,则自动计算为 `100 - percentage`
12
+ * @returns {string} 可直接用于 CSS 的 `color-mix()` 函数字符串(如 `color-mix(in srgb, red 30%, blue 70%)`)
13
+ *
14
+ * @example
15
+ * // 基础用法(自动计算互补占比)
16
+ * mixColor('red', 'blue', 30)
17
+ * // 返回: "color-mix(in srgb, red 30%, blue 70%)"
18
+ *
19
+ * @example
20
+ * // 显式指定双占比 + HSL 色彩空间
21
+ * mixColor('#ff0000', '#0000ff', 40, 'hsl', 60)
22
+ * // 返回: "color-mix(in hsl, #ff0000 40%, #0000ff 60%)"
23
+ */
24
+ export declare const mixColor: (color1: string, color2: string, percentage: number, colorSpace?: "srgb" | "hsl", percentage2?: number) => string;
25
+ /**
26
+ * 将十六进制颜色转换为 RGB
27
+ */
28
+ export declare const hexToRgb: (hex: string) => {
29
+ r: number;
30
+ g: number;
31
+ b: number;
32
+ };
33
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../../src/utils/dom/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,QAAQ,GACnB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,YAAY,MAAM,EAClB,aAAY,MAAM,GAAG,KAAc,EACnC,cAAc,MAAM,KACnB,MAEF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAKvE,CAAA"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 设置 html 根元素的 css 变量
3
+ */
4
+ export declare const setCssVar: (k: string, v: string) => void;
5
+ //# sourceMappingURL=css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../../src/utils/dom/css.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,SAE7C,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * 等待 <img> 加载完成
3
+ */
4
+ export declare function whenImageLoaded(img: HTMLImageElement): Promise<HTMLImageElement>;
5
+ /**
6
+ * 从 <img> 元素获取图片字节数据(ArrayBuffer)
7
+ * @param img 已加载的 <img> 元素
8
+ * @param type 图片类型,可选(默认 png)
9
+ */
10
+ export declare function getImageArrayBuffer(img: HTMLImageElement, type?: string): Promise<ArrayBuffer>;
11
+ /**
12
+ * 等待加载完成并获取字节数据
13
+ */
14
+ export declare function getImgArrayBufferAfterLoad(img: HTMLImageElement, type?: string): Promise<ArrayBuffer>;
15
+ //# sourceMappingURL=img.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"img.d.ts","sourceRoot":"","sources":["../../../src/utils/dom/img.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BhF;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAajH;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAG3G"}
@@ -1,3 +1,4 @@
1
+ /** 可见性改变的监听器 */
1
2
  export interface VisibilityChangeListener {
2
3
  (hidden: boolean): void;
3
4
  }
@@ -7,4 +8,4 @@ export interface VisibilityChangeListener {
7
8
  * @returns 成功监听时返回解绑函数
8
9
  */
9
10
  export declare function onVisibilityChange(listener: VisibilityChangeListener): (() => void) | null;
10
- //# sourceMappingURL=dom.d.ts.map
11
+ //# sourceMappingURL=page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../../src/utils/dom/page.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,WAAW,wBAAwB;IACvC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;CACxB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,uBAiCpE"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 滚动元素到屏幕中心
3
+ * @param el
4
+ */
5
+ export declare function humanScrollElIntoCenter(el: HTMLElement): Promise<void>;
6
+ /**
7
+ * 等待滚动
8
+ */
9
+ export declare function waitScrollTo(targetX: number, targetY: number): Promise<void>;
10
+ /**
11
+ * 模拟人类手感滚动到指定位置
12
+ */
13
+ export declare function humanScrollTo(targetX: number, targetY: number): Promise<void>;
14
+ //# sourceMappingURL=scroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../src/utils/dom/scroll.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,WAAW,iBAkC5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D5E;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BnF"}
@@ -16,7 +16,7 @@ export declare function prependErrorMessage(error: CommonError, preMsg?: string)
16
16
  */
17
17
  export declare function convertToCommonError(error: unknown, preMsg?: string): CommonError;
18
18
  /**
19
- * 获取错误信息
19
+ * 获取异常信息
20
20
  */
21
21
  export declare function getErrorMessage(error: unknown): string;
22
22
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAKpF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAgBjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAKpF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,CAgBjF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,7 @@
1
+ import { GithubRepository } from '../types/github.js';
2
+ /**
3
+ * 从 url 解析 github 仓库信息
4
+ * @param repositoryUrl 仓库 URL(支持带有git+前缀、具体文件路径)
5
+ */
6
+ export declare function parseGithubRepo(repositoryUrl: string): GithubRepository;
7
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/utils/github.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAE1D;;;GAGG;AACH,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,gBAAgB,CA4BvE"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * 生成唯一 id
3
+ */
4
+ export declare function generateId(): string;
5
+ //# sourceMappingURL=id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../src/utils/id.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
@@ -1,24 +1,12 @@
1
- interface NetworkInformation extends EventTarget {
2
- downlink: number;
3
- rtt: number;
4
- effectiveType: 'slow-2g' | '2g' | '3g' | '4g';
5
- }
6
- /**
7
- * 网络状态信息
8
- * - 'offline': 无网络
9
- * - 'online': 在线但不支持 NetworkInformation API
10
- * - NetworkInformation: 含详细网络信息
11
- */
12
- export type NetworkInfo = 'offline' | Omit<NetworkInformation, keyof EventTarget> | 'online';
1
+ import { NetworkState } from '../types/network.js';
13
2
  /**
14
3
  * 获取网络信息
15
4
  */
16
- export declare function getNetworkInfo(): NetworkInfo;
5
+ export declare function getNetworkInfo(): NetworkState;
17
6
  /**
18
7
  * 监听网络状态变化
19
8
  * @param listener 监听器
20
9
  * @returns 成功监听时返回解绑函数
21
10
  */
22
- export declare function onNetworkChange(listener: (info: NetworkInfo) => void): () => void;
23
- export {};
11
+ export declare function onNetworkChange(listener: (info: NetworkState) => void): () => void;
24
12
  //# sourceMappingURL=network.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,UAAU,kBAAmB,SAAQ,WAAW;IAE9C,QAAQ,EAAE,MAAM,CAAC;IAEjB,GAAG,EAAE,MAAM,CAAC;IAEZ,aAAa,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC/C;AAED;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,WAAW,CAAC,GAAG,QAAQ,CAAA;AAM5F;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAiB5C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,cAoBpE"}
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAMpE;;GAEG;AACH,wBAAgB,cAAc,IAAI,YAAY,CAgB7C;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,cAkBrE"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * 支持取消的 sleep
3
+ * @param ms 延迟毫秒数
4
+ * @param signal 取消信号
5
+ */
6
+ export declare function sleep(ms: number, signal?: AbortSignal): Promise<void>;
7
+ /**
8
+ * 支持取消的随机 sleep
9
+ * @param minMS 最小延迟毫秒数
10
+ * @param maxMS 最大延迟毫秒数
11
+ * @param signal 取消信号
12
+ */
13
+ export declare function sleepRandom(minMS: number, maxMS: number, signal?: AbortSignal): Promise<void>;
14
+ //# sourceMappingURL=sleep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sleep.d.ts","sourceRoot":"","sources":["../../src/utils/sleep.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,iBAqBrD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,iBAG7E"}
@@ -1 +1 @@
1
- {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAExD;AAGD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAEpD"}
1
+ {"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../../src/utils/time.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,30 @@
1
+ import { ParsedUrl } from '../types/utl.js';
2
+ /** URL query 中必须编码的保留字符 (RFC 3986) */
3
+ export declare const invalidCharRegex: RegExp;
4
+ /** 查询参数 */
5
+ export type QueryParams = Record<string, string | number | boolean | null | undefined>;
6
+ /**
7
+ * 判断字符串是否为有效的 HTTP/HTTPS URL
8
+ * @param path - 待检测的字符串
9
+ */
10
+ export declare function isHttpUrl(path: string): boolean;
11
+ /**
12
+ * 解析 url
13
+ * @param url
14
+ */
15
+ export declare function parseUrl(url: string): ParsedUrl;
16
+ /**
17
+ * 编码 URL 参数
18
+ * @param params 查询参数
19
+ */
20
+ export declare function encodeURLParams(params: QueryParams): string;
21
+ /**
22
+ *
23
+ */
24
+ /**
25
+ * 合并查询参数
26
+ * @param urlSearchParams url解析后查询参数
27
+ * @param params 单独传的查询参数
28
+ */
29
+ export declare function mergeQueryParams(urlSearchParams: URLSearchParams, params?: QueryParams): QueryParams;
30
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,sCAAsC;AACtC,eAAO,MAAM,gBAAgB,QAAa,CAAA;AAE1C,WAAW;AACX,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAEtF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,WAOrC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAU/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,UAgBlD;AAED;;GAEG;AACH;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,WAAW,CAapG"}
package/package.json CHANGED
@@ -1,18 +1,29 @@
1
1
  {
2
2
  "name": "@ybgnb/utils",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "author": "hzhilong",
5
5
  "private": false,
6
6
  "description": "自用工具库",
7
7
  "type": "module",
8
- "main": "./dist/index.js",
9
- "types": "./dist/index.d.ts",
8
+ "main": "./dist/index.umd.cjs",
9
+ "module": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.umd.cjs"
16
+ }
17
+ },
10
18
  "files": [
11
19
  "dist"
12
20
  ],
13
21
  "scripts": {
14
22
  "check": "tsc --noEmit && eslint .",
15
- "build": "tsc",
23
+ "lint": "eslint . --fix",
24
+ "format": "prettier --write .",
25
+ "barrelsby": "rimraf \"./src/index.ts\" && barrelsby -c barrelsby.json --noHeader --location top && tsx ./scripts/revise-index.ts",
26
+ "build": "vite build --mode library",
16
27
  "npm login": "npm login",
17
28
  "npm publish": "npm publish --access public"
18
29
  },
@@ -30,13 +41,18 @@
30
41
  },
31
42
  "homepage": "https://github.com/hzhilong/ybgnb-js#readme",
32
43
  "devDependencies": {
44
+ "barrelsby": "^2.8.1",
33
45
  "eslint": "^9.39.4",
34
46
  "eslint-config-prettier": "^10.1.8",
35
47
  "prettier": "^3.8.1",
48
+ "rimraf": "^6.1.3",
36
49
  "typescript": "^6.0.2",
37
- "typescript-eslint": "^8.58.0"
50
+ "typescript-eslint": "^8.58.0",
51
+ "vite": "^8.0.8",
52
+ "vite-plugin-dts": "^4.5.4"
38
53
  },
39
54
  "peerDependencies": {
40
- "dayjs": "^1.11.13"
55
+ "dayjs": "^1.11.13",
56
+ "nanoid": "^5.1.9"
41
57
  }
42
58
  }
@@ -1,42 +0,0 @@
1
- import { CommonError } from "./error.js";
2
- import { getErrorMessage } from "../utils/error.js";
3
- /**
4
- * 业务执行结果
5
- */
6
- export class BizResult {
7
- constructor(success, msg, data) {
8
- this.success = success;
9
- this.msg = msg;
10
- this.data = data;
11
- }
12
- static createSuccess(data) {
13
- return new BizResult(true, '操作成功', data);
14
- }
15
- static createFail(msg = '操作失败', data) {
16
- return new BizResult(false, msg, data);
17
- }
18
- static createError(e) {
19
- return new BizResult(false, getErrorMessage(e));
20
- }
21
- async toPromise() {
22
- if (this.success) {
23
- return this.data;
24
- }
25
- else {
26
- throw new CommonError(this.msg);
27
- }
28
- }
29
- }
30
- /**
31
- * 执行业务(自动包裹BuResult)
32
- * @param run 执行方法
33
- */
34
- export const execBiz = async (run) => {
35
- try {
36
- return BizResult.createSuccess(await run());
37
- }
38
- catch (e) {
39
- return BizResult.createError(e);
40
- }
41
- };
42
- //# sourceMappingURL=biz-result.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"biz-result.js","sourceRoot":"","sources":["../../src/common/biz-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,YAAY,CAAC;AACvC,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,SAAS;IAKpB,YAAY,OAAgB,EAAE,GAAW,EAAE,IAAQ;QACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAED,MAAM,CAAC,aAAa,CAAI,IAAO;QAC7B,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,CAAC,UAAU,CAAI,MAAc,MAAM,EAAE,IAAQ;QACjD,OAAO,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,MAAM,CAAC,WAAW,CAAI,CAAU;QAC9B,OAAO,IAAI,SAAS,CAAI,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;IACpD,CAAC;IAOD,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,IAAS,CAAA;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAAK,GAAqB,EAAyB,EAAE;IAC/E,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,aAAa,CAAI,MAAM,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IACjC,CAAC;AACH,CAAC,CAAA"}
@@ -1,19 +0,0 @@
1
- import { getErrorMessage } from "../utils/error.js";
2
- /**
3
- * 通用异常
4
- */
5
- export class CommonError {
6
- constructor(message, error) {
7
- this.message = error ? `${message} ${getErrorMessage(error)}` : message;
8
- this.error = error;
9
- }
10
- }
11
- /**
12
- * 中止异常
13
- */
14
- export class AbortedError extends CommonError {
15
- constructor() {
16
- super("操作已取消");
17
- }
18
- }
19
- //# sourceMappingURL=error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/common/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,OAAO,WAAW;IAItB,YAAY,OAAe,EAAE,KAAe;QAC1C,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACxE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C;QACE,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-helpers.d.ts","sourceRoot":"","sources":["../../src/types/type-helpers.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI;KACtC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,MAAM,MAAM,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CACtF,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,OAAO,CAAC,MAAM,CAAC,CAAC,GACnB,CAAC,GACD,KAAK;CACV,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,GAChG;KACG,CAAC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;CACvE,CAAC,IAAI,CAAC,CAAA;AAET;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,IAAI,CAAC,EAAE,GAAG;IACtD,MAAM,EAAE,CAAC,CAAA;CAEV,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI;KAC9B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC3C,CAAC,MAAM,CAAC,CAAC,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;AAE3C;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,GAAG,KAAK;CACjD,CAAC,MAAM,CAAC,CAAC,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,KAAK,CAAA;AAE7E;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAE/E;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;KAC3B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,CAAC,GAAG,KAAK;CAC/C,CAAC,MAAM,CAAC,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- export {};
3
- //# sourceMappingURL=type-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-helpers.js","sourceRoot":"","sources":["../../src/types/type-helpers.ts"],"names":[],"mappings":"AAAA,uDAAuD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,wBAAwB;IACvC,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,wBAAwB,uBAiCpE"}
package/dist/utils/dom.js DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * 监听页面可见性变化(兼容旧的IE/Chrome)
3
- * @param listener 监听器
4
- * @returns 成功监听时返回解绑函数
5
- */
6
- export function onVisibilityChange(listener) {
7
- let hiddenPropName = undefined, hiddenEventName = undefined;
8
- if (typeof document.hidden !== "undefined") {
9
- // 现代 Web API
10
- hiddenPropName = 'hidden';
11
- hiddenEventName = 'visibilitychange';
12
- }
13
- else if ('msHidden' in document && typeof document.msHidden !== "undefined") {
14
- // 旧 IE
15
- hiddenPropName = 'msHidden';
16
- hiddenEventName = 'msvisibilitychange';
17
- }
18
- else if ('webkitHidden' in document && typeof document.webkitHidden !== "undefined") {
19
- // 旧 Chrome
20
- hiddenPropName = 'webkitHidden';
21
- hiddenEventName = 'webkitvisibilitychange';
22
- }
23
- if (!hiddenPropName || !hiddenEventName) {
24
- return null;
25
- }
26
- const handler = () => {
27
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
28
- // @ts-ignore
29
- listener(document[hiddenPropName]);
30
- };
31
- document.addEventListener(hiddenEventName, handler);
32
- return () => {
33
- document.removeEventListener(hiddenEventName, handler);
34
- };
35
- }
36
- //# sourceMappingURL=dom.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/utils/dom.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAkC;IACnE,IAAI,cAAc,GAAuB,SAAS,EAChD,eAAe,GAAuB,SAAS,CAAC;IAElD,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3C,aAAa;QACb,cAAc,GAAG,QAAQ,CAAC;QAC1B,eAAe,GAAG,kBAAkB,CAAA;IACtC,CAAC;SAAM,IAAI,UAAU,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC9E,OAAO;QACP,cAAc,GAAG,UAAU,CAAC;QAC5B,eAAe,GAAG,oBAAoB,CAAA;IACxC,CAAC;SAAM,IAAI,cAAc,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;QACtF,WAAW;QACX,cAAc,GAAG,cAAc,CAAC;QAChC,eAAe,GAAG,wBAAwB,CAAA;IAC5C,CAAC;IAED,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,6DAA6D;QAC7D,aAAa;QACb,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,GAAG,EAAE;QACV,QAAQ,CAAC,mBAAmB,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;AACJ,CAAC"}
@@ -1,46 +0,0 @@
1
- import { CommonError } from '../common/error.js';
2
- /**
3
- * 判断是否为通用异常
4
- */
5
- export function isCommonError(error) {
6
- return error instanceof CommonError;
7
- }
8
- /**
9
- * 设置异常信息的前置提示
10
- * @param error 异常
11
- * @param preMsg 前置信息 `${preMsg}${error.message}`
12
- */
13
- export function prependErrorMessage(error, preMsg) {
14
- if (preMsg) {
15
- error.message = `${preMsg} ${error.message}`;
16
- }
17
- return error;
18
- }
19
- /**
20
- * 转换到通用异常
21
- * @param error 异常
22
- * @param preMsg 前置提示 `${preMsg}${error.message}`
23
- */
24
- export function convertToCommonError(error, preMsg) {
25
- if (isCommonError(error)) {
26
- return prependErrorMessage(error, preMsg);
27
- }
28
- if (typeof error === 'object' &&
29
- error !== null &&
30
- 'message' in error &&
31
- typeof error.message === 'string') {
32
- const newError = error;
33
- return prependErrorMessage(new CommonError(newError.message), preMsg);
34
- }
35
- else {
36
- // 如果抛出的异常不是object
37
- return prependErrorMessage(new CommonError(String(error)), preMsg);
38
- }
39
- }
40
- /**
41
- * 获取错误信息
42
- */
43
- export function getErrorMessage(error) {
44
- return convertToCommonError(error).message;
45
- }
46
- //# sourceMappingURL=error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,WAAW,CAAA;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB,EAAE,MAAe;IACrE,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,OAAO,GAAG,GAAG,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAC9C,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,MAAe;IAClE,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC3C,CAAC;IACD,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,SAAS,IAAI,KAAK;QAClB,OAAQ,KAAiC,CAAC,OAAO,KAAK,QAAQ,EAC9D,CAAC;QACD,MAAM,QAAQ,GAAG,KAA4B,CAAA;QAC7C,OAAO,mBAAmB,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;IACvE,CAAC;SAAM,CAAC;QACN,kBAAkB;QAClB,OAAO,mBAAmB,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACpE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAA;AAC5C,CAAC"}
@@ -1,41 +0,0 @@
1
- /**
2
- * 随机运行参数
3
- * @param fns
4
- * @param maxCount 最多执行次数(1 ~ fns.length)
5
- */
6
- export function runRandomFunctions(fns, maxCount) {
7
- maxCount = maxCount ?? fns.length;
8
- const count = Math.floor(Math.random() * maxCount) + 1;
9
- const shuffled = [...fns];
10
- for (let i = shuffled.length - 1; i > 0; i--) {
11
- const j = Math.floor(Math.random() * (i + 1));
12
- [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
13
- }
14
- const selected = shuffled.slice(0, count);
15
- for (const fn of selected) {
16
- fn();
17
- }
18
- }
19
- /**
20
- * 将数字范围按批次处理,每个批次调用一次异步函数
21
- *
22
- * @param start - 起始值(包含)
23
- * @param end - 结束值(包含)
24
- * @param batchSize - 每批最大元素个数
25
- * @param processor - 处理单批数字数组的异步函数
26
- *
27
- * @example
28
- * // 分批处理 1..10,每批最多 3 个数字
29
- * await processRangeInBatches(1, 10, 3, async (batch) => {
30
- * console.log(batch) // 输出: [1,2,3], [4,5,6], [7,8,9], [10]
31
- * })
32
- */
33
- export async function processRangeInBatches(start, end, batchSize, processor) {
34
- for (let current = start; current <= end; current += batchSize) {
35
- const remaining = end - current + 1;
36
- const actualSize = Math.min(batchSize, remaining);
37
- const batch = Array.from({ length: actualSize }, (_, idx) => current + idx);
38
- await processor(batch);
39
- }
40
- }
41
- //# sourceMappingURL=function.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"function.js","sourceRoot":"","sources":["../../src/utils/function.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAsB,EAAE,QAAiB;IAC1E,QAAQ,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAA;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAEtD,MAAM,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;IACzB,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC5C;QAAA,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAEzC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,EAAE,EAAE,CAAA;IACN,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAa,EACb,GAAW,EACX,SAAiB,EACjB,SAA6C;IAE7C,KAAK,IAAI,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,GAAG,EAAE,OAAO,IAAI,SAAS,EAAE,CAAC;QAC/D,MAAM,SAAS,GAAG,GAAG,GAAG,OAAO,GAAG,CAAC,CAAA;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACjD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,OAAO,GAAG,GAAG,CAAC,CAAA;QAE3E,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;AACH,CAAC"}
@@ -1,48 +0,0 @@
1
- function isConnection(obj) {
2
- return obj !== null && typeof obj === 'object' && 'downlink' in obj && 'rtt' in obj && 'effectiveType' in obj;
3
- }
4
- /**
5
- * 获取网络信息
6
- */
7
- export function getNetworkInfo() {
8
- if (!navigator.onLine) {
9
- return 'offline';
10
- }
11
- if ('connection' in navigator && isConnection(navigator.connection)) {
12
- // 现代 Web API 直接获取网络连接的信息
13
- const connection = navigator.connection;
14
- return {
15
- downlink: connection.downlink,
16
- rtt: connection.rtt,
17
- effectiveType: connection.effectiveType
18
- };
19
- }
20
- else {
21
- return 'online';
22
- }
23
- }
24
- /**
25
- * 监听网络状态变化
26
- * @param listener 监听器
27
- * @returns 成功监听时返回解绑函数
28
- */
29
- export function onNetworkChange(listener) {
30
- const handleChange = () => {
31
- listener(getNetworkInfo());
32
- };
33
- if ('connection' in navigator && isConnection(navigator.connection)) {
34
- // 现代 Web API
35
- const connection = navigator.connection;
36
- connection.addEventListener('change', handleChange);
37
- return () => connection.removeEventListener('change', handleChange);
38
- }
39
- else {
40
- window.addEventListener('online', handleChange);
41
- window.addEventListener('offline', handleChange);
42
- return () => {
43
- window.removeEventListener('online', handleChange);
44
- window.removeEventListener('offline', handleChange);
45
- };
46
- }
47
- }
48
- //# sourceMappingURL=network.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAiBA,SAAS,YAAY,CAAC,GAAY;IAChC,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,eAAe,IAAI,GAAG,CAAC;AAChH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,yBAAyB;QACzB,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,OAAO;YACL,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,GAAG,EAAE,UAAU,CAAC,GAAG;YACnB,aAAa,EAAE,UAAU,CAAC,aAAa;SACxC,CAAA;IACH,CAAC;SAAM,CAAC;QACN,OAAO,QAAQ,CAAA;IACjB,CAAC;AAEH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,QAAqC;IAEnE,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAA;IAED,IAAI,YAAY,IAAI,SAAS,IAAI,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;QACpE,aAAa;QACb,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QACnD,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QAEN,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;QAC/C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAChD,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACnD,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACtD,CAAC,CAAC;IACJ,CAAC;AACH,CAAC"}