@vlian/framework 1.1.0 → 1.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 (39) hide show
  1. package/dist/index.umd.js +188 -2
  2. package/dist/index.umd.js.map +1 -1
  3. package/dist/request/core/RequestClient.cjs +20 -1
  4. package/dist/request/core/RequestClient.cjs.map +1 -1
  5. package/dist/request/core/RequestClient.d.ts +8 -0
  6. package/dist/request/core/RequestClient.d.ts.map +1 -1
  7. package/dist/request/core/RequestClient.js +20 -1
  8. package/dist/request/core/RequestClient.js.map +1 -1
  9. package/dist/request/index.cjs +3 -0
  10. package/dist/request/index.cjs.map +1 -1
  11. package/dist/request/index.d.ts +2 -2
  12. package/dist/request/index.d.ts.map +1 -1
  13. package/dist/request/index.js +1 -1
  14. package/dist/request/index.js.map +1 -1
  15. package/dist/request/plugin/index.cjs +4 -0
  16. package/dist/request/plugin/index.cjs.map +1 -1
  17. package/dist/request/plugin/index.d.ts +1 -0
  18. package/dist/request/plugin/index.d.ts.map +1 -1
  19. package/dist/request/plugin/index.js +1 -0
  20. package/dist/request/plugin/index.js.map +1 -1
  21. package/dist/request/plugin/queue.cjs +140 -0
  22. package/dist/request/plugin/queue.cjs.map +1 -0
  23. package/dist/request/plugin/queue.d.ts +92 -0
  24. package/dist/request/plugin/queue.d.ts.map +1 -0
  25. package/dist/request/plugin/queue.js +156 -0
  26. package/dist/request/plugin/queue.js.map +1 -0
  27. package/dist/request/utils/RequestQueueManager.cjs +168 -0
  28. package/dist/request/utils/RequestQueueManager.cjs.map +1 -0
  29. package/dist/request/utils/RequestQueueManager.d.ts +75 -0
  30. package/dist/request/utils/RequestQueueManager.d.ts.map +1 -0
  31. package/dist/request/utils/RequestQueueManager.js +160 -0
  32. package/dist/request/utils/RequestQueueManager.js.map +1 -0
  33. package/dist/request/utils/index.cjs +4 -0
  34. package/dist/request/utils/index.cjs.map +1 -1
  35. package/dist/request/utils/index.d.ts +1 -0
  36. package/dist/request/utils/index.d.ts.map +1 -1
  37. package/dist/request/utils/index.js +1 -0
  38. package/dist/request/utils/index.js.map +1 -1
  39. package/package.json +1 -1
package/dist/index.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @vlian/framework v1.1.0
2
+ * @vlian/framework v1.1.1
3
3
  * Secra Framework - 一个现代化的低代码框架
4
4
  * (c) 2026 Secra Framework Contributors
5
5
  * Licensed under Apache-2.0
@@ -37097,6 +37097,173 @@
37097
37097
  });
37098
37098
  }
37099
37099
 
37100
+ /**
37101
+ * 请求队列管理器
37102
+ *
37103
+ * 用于管理待执行的请求队列,支持请求拦截、暂停、恢复等功能
37104
+ */
37105
+ /**
37106
+ * 队列状态
37107
+ */
37108
+ var QueueState;
37109
+ (function (QueueState) {
37110
+ /**
37111
+ * 正常状态,请求可以正常执行
37112
+ */
37113
+ QueueState["IDLE"] = "idle";
37114
+ /**
37115
+ * 暂停状态,请求会被放入队列
37116
+ */
37117
+ QueueState["PAUSED"] = "paused";
37118
+ /**
37119
+ * 处理中状态,正在执行回调
37120
+ */
37121
+ QueueState["PROCESSING"] = "processing";
37122
+ })(QueueState || (QueueState = {}));
37123
+ /**
37124
+ * 请求队列管理器
37125
+ */
37126
+ class RequestQueueManager {
37127
+ constructor() {
37128
+ /**
37129
+ * 待执行的请求队列
37130
+ */
37131
+ this.queue = [];
37132
+ /**
37133
+ * 队列状态
37134
+ */
37135
+ this.state = QueueState.IDLE;
37136
+ /**
37137
+ * 当前正在执行的回调 Promise
37138
+ */
37139
+ this.processingPromise = null;
37140
+ }
37141
+ /**
37142
+ * 获取单例实例
37143
+ */
37144
+ static getInstance() {
37145
+ if (!RequestQueueManager.instance) {
37146
+ RequestQueueManager.instance = new RequestQueueManager();
37147
+ }
37148
+ return RequestQueueManager.instance;
37149
+ }
37150
+ /**
37151
+ * 检查队列是否处于暂停状态
37152
+ */
37153
+ isPaused() {
37154
+ return this.state === QueueState.PAUSED || this.state === QueueState.PROCESSING;
37155
+ }
37156
+ /**
37157
+ * 暂停队列,后续请求会被放入队列
37158
+ */
37159
+ pause() {
37160
+ if (this.state === QueueState.IDLE) {
37161
+ this.state = QueueState.PAUSED;
37162
+ }
37163
+ }
37164
+ /**
37165
+ * 恢复队列,执行队列中的所有请求
37166
+ */
37167
+ async resume() {
37168
+ if (this.state === QueueState.IDLE) {
37169
+ return;
37170
+ }
37171
+ this.state = QueueState.IDLE;
37172
+ // 执行队列中的所有请求
37173
+ const requests = [...this.queue];
37174
+ this.queue = [];
37175
+ // 并行执行所有请求
37176
+ await Promise.allSettled(requests.map((item) => {
37177
+ return item
37178
+ .execute()
37179
+ .then(item.resolve)
37180
+ .catch(item.reject);
37181
+ }));
37182
+ }
37183
+ /**
37184
+ * 执行回调并等待完成,然后恢复队列
37185
+ *
37186
+ * @param callback - 回调函数
37187
+ */
37188
+ async processAndResume(callback) {
37189
+ if (this.state === QueueState.PROCESSING) {
37190
+ // 如果已经在处理中,等待当前处理完成
37191
+ if (this.processingPromise) {
37192
+ await this.processingPromise;
37193
+ }
37194
+ return;
37195
+ }
37196
+ this.state = QueueState.PROCESSING;
37197
+ try {
37198
+ // 执行回调
37199
+ this.processingPromise = Promise.resolve(callback());
37200
+ await this.processingPromise;
37201
+ }
37202
+ finally {
37203
+ this.processingPromise = null;
37204
+ // 恢复队列
37205
+ await this.resume();
37206
+ }
37207
+ }
37208
+ /**
37209
+ * 将请求添加到队列
37210
+ *
37211
+ * @template TResponse - 响应数据类型
37212
+ * @param options - 请求配置
37213
+ * @param execute - 请求执行函数
37214
+ * @returns Promise 解析为响应对象
37215
+ */
37216
+ async enqueue(options, execute) {
37217
+ return new Promise((resolve, reject) => {
37218
+ this.queue.push({
37219
+ options: options,
37220
+ execute: execute,
37221
+ resolve: resolve,
37222
+ reject,
37223
+ timestamp: Date.now(),
37224
+ });
37225
+ });
37226
+ }
37227
+ /**
37228
+ * 获取队列长度
37229
+ */
37230
+ getQueueLength() {
37231
+ return this.queue.length;
37232
+ }
37233
+ /**
37234
+ * 清空队列
37235
+ *
37236
+ * @param reason - 清空原因(用于错误信息)
37237
+ */
37238
+ clear(reason) {
37239
+ const requests = [...this.queue];
37240
+ this.queue = [];
37241
+ // 拒绝所有待执行的请求
37242
+ const error = reason
37243
+ ? new Error(`请求队列已清空: ${reason}`)
37244
+ : new Error('请求队列已清空');
37245
+ requests.forEach((item) => {
37246
+ item.reject(error);
37247
+ });
37248
+ this.state = QueueState.IDLE;
37249
+ this.processingPromise = null;
37250
+ }
37251
+ /**
37252
+ * 销毁管理器
37253
+ */
37254
+ destroy() {
37255
+ this.clear('管理器已销毁');
37256
+ RequestQueueManager.instance = null;
37257
+ }
37258
+ }
37259
+ RequestQueueManager.instance = null;
37260
+ /**
37261
+ * 获取请求队列管理器实例
37262
+ */
37263
+ function getRequestQueueManager() {
37264
+ return RequestQueueManager.getInstance();
37265
+ }
37266
+
37100
37267
  /**
37101
37268
  * 请求客户端核心实现
37102
37269
  *
@@ -37362,8 +37529,24 @@
37362
37529
  }
37363
37530
  // 合并配置
37364
37531
  const mergedOptions = this.mergeOptions(options);
37532
+ // 检查队列状态,如果队列已暂停,将请求放入队列
37533
+ const queueManager = getRequestQueueManager();
37534
+ if (queueManager.isPaused()) {
37535
+ return queueManager.enqueue(mergedOptions, () => this.executeRequest(mergedOptions));
37536
+ }
37537
+ // 正常执行请求
37538
+ return this.executeRequest(mergedOptions);
37539
+ }
37540
+ /**
37541
+ * 执行实际的请求逻辑
37542
+ *
37543
+ * @template TResponse - 响应数据类型
37544
+ * @param options - 请求配置选项
37545
+ * @returns Promise 解析为响应对象
37546
+ */
37547
+ async executeRequest(options) {
37365
37548
  // 创建请求上下文
37366
- const context = createRequestContext(mergedOptions, {});
37549
+ const context = createRequestContext(options, {});
37367
37550
  try {
37368
37551
  // 执行请求前钩子
37369
37552
  const beforeResult = await this.pluginManager.executeHook(exports.PluginLifecycleStage.BEFORE_REQUEST, context);
@@ -37382,6 +37565,9 @@
37382
37565
  // 执行请求
37383
37566
  let response;
37384
37567
  try {
37568
+ if (!this.adapter) {
37569
+ throw new Error('适配器未初始化');
37570
+ }
37385
37571
  response = await this.adapter.request(context.request);
37386
37572
  }
37387
37573
  catch (error) {