@base-web-kits/base-tools-web 1.3.5 → 1.3.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.
@@ -58,7 +58,16 @@ export type RequestConfigBase<D extends RequestData = RequestData> = {
58
58
  resMap?: (data: ResponseData) => ResponseData;
59
59
  /** 获取请求对象, 用于取消请求 */
60
60
  onTaskReady?: (task: RequestTask) => void;
61
- /** 流式数据接收事件回调 (已完成基础流式解析,返回消息对象) */
61
+ /**
62
+ * 流式数据接收事件回调 (已完成基础流式解析,返回消息对象)
63
+ * @example
64
+ * function onMessage(msg: SSEMessage) {
65
+ * console.log(msg);
66
+ * if(msg.type === 'DONE') { } // 流式传输结束
67
+ * if(msg.type === 'thinking') { } // 思考中
68
+ * if(msg.type === 'xx') { } // 各种消息类型
69
+ * }
70
+ */
62
71
  onMessage?: MessageCallback;
63
72
  };
64
73
  /** 请求任务对象 (用于取消请求) */
@@ -66,10 +75,6 @@ export type RequestTask = {
66
75
  /** 取消请求 */
67
76
  abort: () => void;
68
77
  };
69
- /** 流式数据块接收事件回调 */
70
- export type ChunkCallback = (response: {
71
- data: ArrayBuffer;
72
- }) => void;
73
78
  /**
74
79
  * 基础请求 (返回 Promise 和 Task 对象)
75
80
  * 基于 fetch API 封装,支持流式请求
@@ -141,13 +146,16 @@ export type ChunkCallback = (response: {
141
146
  * // 流式监听
142
147
  * const onMessage = (msg: SSEMessage) => {
143
148
  * console.log(msg);
149
+ * if(msg.type === 'DONE') { } // 流式传输结束
150
+ * if(msg.type === 'thinking') { } // 思考中
151
+ * if(msg.type === 'xx') { } // 各种消息类型
144
152
  * }
145
153
  *
146
154
  * // 流式发起
147
155
  * const data = { content: '你好', chatId: 123 };
148
156
  * apiChatStream({ data, onTaskReady, onMessage });
149
157
  *
150
- * // 流式取消 (在组件销毁或页面关闭时调用, 若流式已生成, 此时abort无效, 因为请求已成功)
158
+ * // 流式取消 (在组件销毁或页面关闭时调用)
151
159
  * chatTask?.abort();
152
160
  */
153
161
  export declare function request<T, D extends RequestData = RequestData>(config: RequestConfigBase<D>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/web/network/request.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/web/network/request.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base-web-kits/base-tools-web",
3
- "version": "1.3.5",
3
+ "version": "1.3.8",
4
4
  "sideEffects": false,
5
5
  "description": "Independent Web utilities package built from src/web.",
6
6
  "keywords": [
@@ -108,7 +108,16 @@ export type RequestConfigBase<D extends RequestData = RequestData> = {
108
108
  /** 获取请求对象, 用于取消请求 */
109
109
  onTaskReady?: (task: RequestTask) => void;
110
110
 
111
- /** 流式数据接收事件回调 (已完成基础流式解析,返回消息对象) */
111
+ /**
112
+ * 流式数据接收事件回调 (已完成基础流式解析,返回消息对象)
113
+ * @example
114
+ * function onMessage(msg: SSEMessage) {
115
+ * console.log(msg);
116
+ * if(msg.type === 'DONE') { } // 流式传输结束
117
+ * if(msg.type === 'thinking') { } // 思考中
118
+ * if(msg.type === 'xx') { } // 各种消息类型
119
+ * }
120
+ */
112
121
  onMessage?: MessageCallback;
113
122
  };
114
123
 
@@ -118,9 +127,6 @@ export type RequestTask = {
118
127
  abort: () => void;
119
128
  };
120
129
 
121
- /** 流式数据块接收事件回调 */
122
- export type ChunkCallback = (response: { data: ArrayBuffer }) => void;
123
-
124
130
  /**
125
131
  * 流式解析对象
126
132
  * - undefined: 未初始化
@@ -202,13 +208,16 @@ const requestCache = new Map<string, { res: unknown; expire: number }>();
202
208
  * // 流式监听
203
209
  * const onMessage = (msg: SSEMessage) => {
204
210
  * console.log(msg);
211
+ * if(msg.type === 'DONE') { } // 流式传输结束
212
+ * if(msg.type === 'thinking') { } // 思考中
213
+ * if(msg.type === 'xx') { } // 各种消息类型
205
214
  * }
206
215
  *
207
216
  * // 流式发起
208
217
  * const data = { content: '你好', chatId: 123 };
209
218
  * apiChatStream({ data, onTaskReady, onMessage });
210
219
  *
211
- * // 流式取消 (在组件销毁或页面关闭时调用, 若流式已生成, 此时abort无效, 因为请求已成功)
220
+ * // 流式取消 (在组件销毁或页面关闭时调用)
212
221
  * chatTask?.abort();
213
222
  */
214
223
  export function request<T, D extends RequestData = RequestData>(config: RequestConfigBase<D>) {
@@ -403,7 +412,8 @@ export function request<T, D extends RequestData = RequestData>(config: RequestC
403
412
  return;
404
413
  }
405
414
 
406
- if (!isAbortError && toastError) appConfig.toast?.({ status, msg: '网络请求失败' });
415
+ if (!isAbortError && toastError)
416
+ appConfig.toast?.({ status, msg: `请求失败,${String(e)}` });
407
417
  logRequestInfo({ status, config: logConfig, startTime, e });
408
418
  reject(e);
409
419
  } finally {
@@ -478,7 +488,7 @@ function logRequestInfo(options: {
478
488
  info.res = cloneDeep(res); // 深拷贝,避免外部修改对象,造成输出不一致
479
489
  log('info', info);
480
490
  } else {
481
- info.e = e;
491
+ info.e = e instanceof Error ? { name: e.name, message: e.message, stack: e.stack } : String(e); // Error需转为普通对象,否则发送网络日志会序列化成空对象
482
492
  log('error', info);
483
493
  }
484
494
  }
@@ -508,9 +518,11 @@ function checkCache(cacheKey: string) {
508
518
  * 处理流式响应
509
519
  */
510
520
  async function handleStreamResponse(response: Response, sseTask: SseTask) {
511
- if (!response.body) return 'Stream is empty';
521
+ if (!response.body) throw new Error('Response body is null');
512
522
  if (sseTask.parser === undefined) {
513
- return 'onMessage is undefined → Stream parser skipped';
523
+ throw new Error(
524
+ 'Stream parser missing: Please set config.onMessage when enableChunked is true',
525
+ );
514
526
  }
515
527
 
516
528
  const reader = response.body.getReader();