@bettergi/utils 0.1.6 → 0.1.8

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/README.md CHANGED
@@ -174,6 +174,20 @@ const d1 = getNextDay4AM();
174
174
  const d2 = getNextMonday4AM();
175
175
  ```
176
176
 
177
+ ### 异常
178
+
179
+ ```ts
180
+ // 重复执行某个可能失败的异步操作,但是发生主机异常(如任务取消)时停止
181
+ for (let i = 0; i < 1000; i++) {
182
+ try {
183
+ await sleep(i);
184
+ } catch (err: any) {
185
+ if (isHostException(err)) throw err;
186
+ log.info(`第 ${i} 次运行失败,错误信息:${err.message}`);
187
+ }
188
+ }
189
+ ```
190
+
177
191
  ### 杂项
178
192
 
179
193
  ```ts
@@ -183,4 +197,7 @@ const uuid = generateUUID(false);
183
197
  // 数组洗牌
184
198
  const arr = [1, 2, 3, 4, 5];
185
199
  const shuffled = shuffleArray(arr);
200
+
201
+ // 深度合并多个对象:{ x: 1, y: { a: 2, b: 4, c: 5 }, d: 6 }
202
+ const result = deepMerge({ x: 1, y: { a: 2, b: 3 } }, { y: { b: 4, c: 5 }, d: 6 });
186
203
  ```
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 判断是否为主机异常
3
+ * @param err 异常对象
4
+ */
5
+ export declare const isHostException: (err: any) => boolean;
6
+ /**
7
+ * 判断是否为任务取消异常
8
+ * @param err 异常对象
9
+ */
10
+ export declare const isTaskCanceledException: (err: any) => any;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * 判断是否为主机异常
3
+ * @param err 异常对象
4
+ */
5
+ export const isHostException = (err) => {
6
+ return typeof err === "object" && Object.prototype.hasOwnProperty.call(err, "hostException");
7
+ };
8
+ /**
9
+ * 判断是否为任务取消异常
10
+ * @param err 异常对象
11
+ */
12
+ export const isTaskCanceledException = (err) => {
13
+ return (isHostException(err) &&
14
+ typeof err?.message === "string" &&
15
+ err.message.includes("task was canceled"));
16
+ };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  /** 断言 */
2
2
  export * from "./asserts";
3
+ /** 异常 */
4
+ export * from "./exception";
3
5
  /** 文件操作 */
4
6
  export * from "./file";
5
7
  /** 游戏操作 */
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  /** 断言 */
2
2
  export * from "./asserts";
3
+ /** 异常 */
4
+ export * from "./exception";
3
5
  /** 文件操作 */
4
6
  export * from "./file";
5
7
  /** 游戏操作 */
package/dist/misc.d.ts CHANGED
@@ -9,3 +9,9 @@ export declare const generateUUID: (withDashes?: boolean) => string;
9
9
  * @returns 洗牌后的新数组
10
10
  */
11
11
  export declare const shuffleArray: <T>(array: T[]) => T[];
12
+ /**
13
+ * 深度合并多个对象
14
+ * @param objects 多个对象
15
+ * @returns 合并后的对象副本
16
+ */
17
+ export declare const deepMerge: (...objects: any[]) => any;
package/dist/misc.js CHANGED
@@ -24,3 +24,18 @@ export const shuffleArray = (array) => {
24
24
  }
25
25
  return shuffled;
26
26
  };
27
+ /**
28
+ * 深度合并多个对象
29
+ * @param objects 多个对象
30
+ * @returns 合并后的对象副本
31
+ */
32
+ export const deepMerge = (...objects) => {
33
+ const isPlainObject = (input) => input?.constructor === Object;
34
+ return objects.reduce((result, obj) => {
35
+ return Object.entries(obj).reduce((acc, [key, value]) => {
36
+ const recursive = isPlainObject(acc[key]) && isPlainObject(value);
37
+ acc[key] = recursive ? deepMerge(acc[key], value) : value;
38
+ return acc;
39
+ }, result);
40
+ }, {});
41
+ };
package/dist/store.d.ts CHANGED
@@ -5,3 +5,9 @@
5
5
  * @param name 存储对象的名称,将作为文件名(不包扩展名)
6
6
  */
7
7
  export declare const useStore: <T extends Record<string, any>>(name: string) => T;
8
+ /**
9
+ * 创建一个带有默认值的持久化存储对象,用于管理应用状态数据
10
+ * @param name 存储对象的名称,将作为文件名(不包扩展名)
11
+ * @param defaults 默认值数据对象
12
+ */
13
+ export declare const useStoreWithDefaults: <T extends Record<string, any>>(name: string, defaults: Partial<T>) => T;
package/dist/store.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { deepMerge } from "./misc";
1
2
  /**
2
3
  * 创建一个持久化存储对象,用于管理应用状态数据
3
4
  * 该函数会创建一个代理对象,对该对象的所有属性的修改都会自动同步到相应的JSON文件(脚本的 `store` 目录下)中。
@@ -50,3 +51,13 @@ export const useStore = (name) => {
50
51
  };
51
52
  return createProxy(obj);
52
53
  };
54
+ /**
55
+ * 创建一个带有默认值的持久化存储对象,用于管理应用状态数据
56
+ * @param name 存储对象的名称,将作为文件名(不包扩展名)
57
+ * @param defaults 默认值数据对象
58
+ */
59
+ export const useStoreWithDefaults = (name, defaults) => {
60
+ const store = useStore(name);
61
+ Object.assign(store, deepMerge(defaults, store));
62
+ return store;
63
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bettergi/utils",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "description": "开发 BetterGI 脚本常用工具集",
5
5
  "type": "module",
6
6
  "author": "Bread Grocery<https://github.com/breadgrocery>",