front-cpu 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 (136) hide show
  1. package/README.md +475 -0
  2. package/README.zh-CN.md +474 -0
  3. package/dist/Pipeline.d.ts +119 -0
  4. package/dist/Pipeline.d.ts.map +1 -0
  5. package/dist/Pipeline.js +373 -0
  6. package/dist/Pipeline.js.map +1 -0
  7. package/dist/debug.d.ts +3 -0
  8. package/dist/debug.d.ts.map +1 -0
  9. package/dist/debug.js +12 -0
  10. package/dist/debug.js.map +1 -0
  11. package/dist/index.d.ts +20 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +19 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/interfaces.d.ts +49 -0
  16. package/dist/interfaces.d.ts.map +1 -0
  17. package/dist/interfaces.js +8 -0
  18. package/dist/interfaces.js.map +1 -0
  19. package/dist/isa/index.d.ts +20 -0
  20. package/dist/isa/index.d.ts.map +1 -0
  21. package/dist/isa/index.js +26 -0
  22. package/dist/isa/index.js.map +1 -0
  23. package/dist/isa/types.d.ts +144 -0
  24. package/dist/isa/types.d.ts.map +1 -0
  25. package/dist/isa/types.js +10 -0
  26. package/dist/isa/types.js.map +1 -0
  27. package/dist/logging/CPUConsole.d.ts +105 -0
  28. package/dist/logging/CPUConsole.d.ts.map +1 -0
  29. package/dist/logging/CPUConsole.js +471 -0
  30. package/dist/logging/CPUConsole.js.map +1 -0
  31. package/dist/logging/CPUDebugger.d.ts +91 -0
  32. package/dist/logging/CPUDebugger.d.ts.map +1 -0
  33. package/dist/logging/CPUDebugger.js +166 -0
  34. package/dist/logging/CPUDebugger.js.map +1 -0
  35. package/dist/logging/CPUEventCollector.d.ts +90 -0
  36. package/dist/logging/CPUEventCollector.d.ts.map +1 -0
  37. package/dist/logging/CPUEventCollector.js +353 -0
  38. package/dist/logging/CPUEventCollector.js.map +1 -0
  39. package/dist/logging/CPULogger.d.ts +150 -0
  40. package/dist/logging/CPULogger.d.ts.map +1 -0
  41. package/dist/logging/CPULogger.js +336 -0
  42. package/dist/logging/CPULogger.js.map +1 -0
  43. package/dist/logging/index.d.ts +10 -0
  44. package/dist/logging/index.d.ts.map +1 -0
  45. package/dist/logging/index.js +16 -0
  46. package/dist/logging/index.js.map +1 -0
  47. package/dist/logging/runtime.d.ts +37 -0
  48. package/dist/logging/runtime.d.ts.map +1 -0
  49. package/dist/logging/runtime.js +42 -0
  50. package/dist/logging/runtime.js.map +1 -0
  51. package/dist/logging/stack-parser.d.ts +22 -0
  52. package/dist/logging/stack-parser.d.ts.map +1 -0
  53. package/dist/logging/stack-parser.js +144 -0
  54. package/dist/logging/stack-parser.js.map +1 -0
  55. package/dist/logging/types.d.ts +73 -0
  56. package/dist/logging/types.d.ts.map +1 -0
  57. package/dist/logging/types.js +47 -0
  58. package/dist/logging/types.js.map +1 -0
  59. package/dist/scheduling/ResourceStrategyRegistry.d.ts +61 -0
  60. package/dist/scheduling/ResourceStrategyRegistry.d.ts.map +1 -0
  61. package/dist/scheduling/ResourceStrategyRegistry.js +109 -0
  62. package/dist/scheduling/ResourceStrategyRegistry.js.map +1 -0
  63. package/dist/scheduling/index.d.ts +6 -0
  64. package/dist/scheduling/index.d.ts.map +1 -0
  65. package/dist/scheduling/index.js +5 -0
  66. package/dist/scheduling/index.js.map +1 -0
  67. package/dist/scheduling/types.d.ts +44 -0
  68. package/dist/scheduling/types.d.ts.map +1 -0
  69. package/dist/scheduling/types.js +5 -0
  70. package/dist/scheduling/types.js.map +1 -0
  71. package/dist/stages/EX.d.ts +17 -0
  72. package/dist/stages/EX.d.ts.map +1 -0
  73. package/dist/stages/EX.js +95 -0
  74. package/dist/stages/EX.js.map +1 -0
  75. package/dist/stages/IF.d.ts +41 -0
  76. package/dist/stages/IF.d.ts.map +1 -0
  77. package/dist/stages/IF.js +83 -0
  78. package/dist/stages/IF.js.map +1 -0
  79. package/dist/stages/RES.d.ts +17 -0
  80. package/dist/stages/RES.d.ts.map +1 -0
  81. package/dist/stages/RES.js +37 -0
  82. package/dist/stages/RES.js.map +1 -0
  83. package/dist/stages/SCH.d.ts +77 -0
  84. package/dist/stages/SCH.d.ts.map +1 -0
  85. package/dist/stages/SCH.js +270 -0
  86. package/dist/stages/SCH.js.map +1 -0
  87. package/dist/stages/WB.d.ts +19 -0
  88. package/dist/stages/WB.d.ts.map +1 -0
  89. package/dist/stages/WB.js +102 -0
  90. package/dist/stages/WB.js.map +1 -0
  91. package/dist/types.d.ts +111 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +26 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/InstructionCancellation.d.ts +31 -0
  96. package/dist/utils/InstructionCancellation.d.ts.map +1 -0
  97. package/dist/utils/InstructionCancellation.js +53 -0
  98. package/dist/utils/InstructionCancellation.js.map +1 -0
  99. package/dist/utils/abortable.d.ts +30 -0
  100. package/dist/utils/abortable.d.ts.map +1 -0
  101. package/dist/utils/abortable.js +76 -0
  102. package/dist/utils/abortable.js.map +1 -0
  103. package/dist/utils/request.d.ts +27 -0
  104. package/dist/utils/request.d.ts.map +1 -0
  105. package/dist/utils/request.js +96 -0
  106. package/dist/utils/request.js.map +1 -0
  107. package/package.json +74 -0
  108. package/src/Pipeline.ts +475 -0
  109. package/src/debug.ts +15 -0
  110. package/src/index.ts +67 -0
  111. package/src/interfaces.ts +53 -0
  112. package/src/isa/index.ts +34 -0
  113. package/src/isa/types.ts +178 -0
  114. package/src/logging/CPUConsole.md +843 -0
  115. package/src/logging/CPUConsole.ts +631 -0
  116. package/src/logging/CPUDebugger.ts +235 -0
  117. package/src/logging/CPUEventCollector.ts +418 -0
  118. package/src/logging/CPULogger.ts +435 -0
  119. package/src/logging/CPU_LOGGING_DESIGN.md +1319 -0
  120. package/src/logging/USAGE_GUIDE.md +505 -0
  121. package/src/logging/index.ts +21 -0
  122. package/src/logging/runtime.ts +96 -0
  123. package/src/logging/stack-parser.ts +168 -0
  124. package/src/logging/types.ts +101 -0
  125. package/src/scheduling/ResourceStrategyRegistry.ts +124 -0
  126. package/src/scheduling/index.ts +13 -0
  127. package/src/scheduling/types.ts +47 -0
  128. package/src/stages/EX.ts +121 -0
  129. package/src/stages/IF.ts +103 -0
  130. package/src/stages/RES.ts +46 -0
  131. package/src/stages/SCH.ts +331 -0
  132. package/src/stages/WB.ts +127 -0
  133. package/src/types.ts +118 -0
  134. package/src/utils/InstructionCancellation.ts +73 -0
  135. package/src/utils/abortable.ts +89 -0
  136. package/src/utils/request.ts +125 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * WB阶段:Write Back(写回)
3
+ *
4
+ * 职责:
5
+ * 1. 调用 commit 函数(成功时)
6
+ * 2. 回滚乐观更新(失败时)
7
+ */
8
+ import { InstructionStatus } from '../types';
9
+ import { getISA } from '../isa';
10
+ import { cpuEventCollector, cpuConsole } from '../logging/runtime';
11
+ export class WriteBackStage {
12
+ /**
13
+ * 回滚乐观更新
14
+ */
15
+ rollbackOptimisticUpdate(instruction) {
16
+ const ISA = getISA();
17
+ const definition = ISA[instruction.type];
18
+ if (instruction.optimisticSnapshot && definition?.optimistic?.rollback) {
19
+ // 记录回滚操作
20
+ if (!instruction.writeBackExecution) {
21
+ instruction.writeBackExecution = { hasCommit: false, rollbackExecuted: true };
22
+ }
23
+ instruction.writeBackExecution.rollbackExecuted = true;
24
+ instruction.writeBackExecution.rollbackSnapshot = instruction.optimisticSnapshot;
25
+ // 🎯 记录乐观更新回滚事件
26
+ cpuEventCollector.onOptimisticRolledBack(instruction.id, instruction.type, instruction.context.correlationId, instruction.optimisticSnapshot, '指令执行失败', instruction.error);
27
+ cpuConsole.onOptimisticRolledBack(instruction, '指令执行失败');
28
+ try {
29
+ definition.optimistic.rollback(instruction.optimisticSnapshot);
30
+ }
31
+ catch (rollbackError) {
32
+ instruction.writeBackExecution.rollbackError =
33
+ rollbackError instanceof Error ? rollbackError : new Error(String(rollbackError));
34
+ console.error('❌ [CPU] 乐观更新回滚失败:', {
35
+ instructionId: instruction.id,
36
+ type: instruction.type,
37
+ error: rollbackError,
38
+ });
39
+ }
40
+ }
41
+ }
42
+ /**
43
+ * 写回/完成指令
44
+ */
45
+ async writeBack(instruction, success) {
46
+ // 标记WB阶段
47
+ instruction.timestamps.WB = Date.now();
48
+ const ISA = getISA();
49
+ const definition = ISA[instruction.type];
50
+ // 初始化WB执行记录
51
+ instruction.writeBackExecution = {
52
+ hasCommit: !!(definition && definition.commit),
53
+ rollbackExecuted: false,
54
+ };
55
+ // 🔥 如果指令已被取消,只回滚不提交
56
+ if (instruction.cancelled) {
57
+ this.rollbackOptimisticUpdate(instruction);
58
+ return;
59
+ }
60
+ if (success) {
61
+ // ==================== 成功路径 ====================
62
+ // 🔥 调用 commit 函数(如果存在)
63
+ if (definition && definition.commit) {
64
+ // 记录commit调用参数
65
+ instruction.writeBackExecution.commitArgs = {
66
+ result: instruction.result,
67
+ payload: instruction.payload,
68
+ context: instruction.context,
69
+ optimisticSnapshot: instruction.optimisticSnapshot,
70
+ };
71
+ try {
72
+ await definition.commit(instruction.result, instruction.payload, instruction.context, instruction.optimisticSnapshot // 🔥 传递乐观更新快照
73
+ );
74
+ instruction.writeBackExecution.commitSuccess = true;
75
+ }
76
+ catch (error) {
77
+ instruction.writeBackExecution.commitSuccess = false;
78
+ instruction.writeBackExecution.commitError =
79
+ error instanceof Error ? error : new Error(String(error));
80
+ // commit失败 → 回滚乐观更新
81
+ this.rollbackOptimisticUpdate(instruction);
82
+ // 设置为失败状态
83
+ instruction.status = InstructionStatus.FAILED;
84
+ instruction.error = instruction.writeBackExecution.commitError;
85
+ return;
86
+ }
87
+ }
88
+ // 成功场景
89
+ instruction.status = InstructionStatus.COMMITTED;
90
+ }
91
+ else {
92
+ // ==================== 失败路径 ====================
93
+ // 🔥 回滚乐观更新
94
+ this.rollbackOptimisticUpdate(instruction);
95
+ // 设置失败状态(如果不是已取消)
96
+ if (instruction.status !== InstructionStatus.CANCELLED) {
97
+ instruction.status = InstructionStatus.FAILED;
98
+ }
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=WB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WB.js","sourceRoot":"","sources":["../../src/stages/WB.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * CPU流水线核心类型定义
3
+ */
4
+ import type { CallSource } from './logging/types';
5
+ /**
6
+ * 流水线阶段
7
+ */
8
+ export declare const PipelineStage: {
9
+ readonly IF: "IF";
10
+ readonly SCH: "SCH";
11
+ readonly EX: "EX";
12
+ readonly RES: "RES";
13
+ readonly WB: "WB";
14
+ };
15
+ export type PipelineStage = (typeof PipelineStage)[keyof typeof PipelineStage];
16
+ /**
17
+ * 指令状态
18
+ */
19
+ export declare const InstructionStatus: {
20
+ readonly PENDING: "pending";
21
+ readonly ISSUED: "issued";
22
+ readonly EXECUTING: "executing";
23
+ readonly RESPONDED: "responded";
24
+ readonly COMMITTED: "committed";
25
+ readonly FAILED: "failed";
26
+ readonly CANCELLED: "cancelled";
27
+ };
28
+ export type InstructionStatus = (typeof InstructionStatus)[keyof typeof InstructionStatus];
29
+ /**
30
+ * 指令执行上下文
31
+ */
32
+ export interface InstructionContext {
33
+ /** 指令唯一ID */
34
+ instructionId: string;
35
+ /** 关联ID(用于SSE去重等) */
36
+ correlationId: string;
37
+ /** 时间戳 */
38
+ timestamp: number;
39
+ /** 来源 */
40
+ source: 'user' | 'system' | 'test';
41
+ /** 重试次数 */
42
+ retryCount: number;
43
+ /** 调用源(哪个文件哪一行发起的指令) */
44
+ callSource?: CallSource;
45
+ }
46
+ /**
47
+ * WB阶段执行信息
48
+ */
49
+ export interface WriteBackExecution {
50
+ /** 是否有commit函数 */
51
+ hasCommit: boolean;
52
+ /** commit函数调用参数 */
53
+ commitArgs?: {
54
+ result: any;
55
+ payload: any;
56
+ context: InstructionContext;
57
+ optimisticSnapshot?: any;
58
+ };
59
+ /** commit执行结果 */
60
+ commitSuccess?: boolean;
61
+ /** commit错误信息 */
62
+ commitError?: Error;
63
+ /** 是否执行了回滚 */
64
+ rollbackExecuted?: boolean;
65
+ /** 回滚快照 */
66
+ rollbackSnapshot?: any;
67
+ /** 回滚错误 */
68
+ rollbackError?: Error;
69
+ }
70
+ /**
71
+ * 队列中的指令
72
+ */
73
+ export interface QueuedInstruction<TPayload = any> {
74
+ /** 指令ID */
75
+ id: string;
76
+ /** 指令类型 */
77
+ type: string;
78
+ /** 指令负载 */
79
+ payload: TPayload;
80
+ /** 执行上下文 */
81
+ context: InstructionContext;
82
+ /** 当前状态 */
83
+ status: InstructionStatus;
84
+ /** 各阶段时间戳 */
85
+ timestamps: {
86
+ IF?: number;
87
+ SCH?: number;
88
+ EX?: number;
89
+ RES?: number;
90
+ WB?: number;
91
+ };
92
+ /** 执行结果 */
93
+ result?: any;
94
+ /** 错误信息 */
95
+ error?: Error;
96
+ /** 乐观更新快照(用于回滚) */
97
+ optimisticSnapshot?: any;
98
+ /** WB阶段执行详情 */
99
+ writeBackExecution?: WriteBackExecution;
100
+ /** 是否已取消(用于 switchMap 策略) */
101
+ cancelled?: boolean;
102
+ /** 取消原因 */
103
+ cancelReason?: string;
104
+ /** 取消发生的阶段 */
105
+ cancelledAt?: 'SCH' | 'EX' | 'RES';
106
+ /** 用于取消网络请求 */
107
+ abortController?: AbortController;
108
+ /** 指令标签 */
109
+ tags?: string[];
110
+ }
111
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAA;AAE9E;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAA;AAE1F;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS;IACT,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;IAClC,WAAW;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,wBAAwB;IACxB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kBAAkB;IAClB,SAAS,EAAE,OAAO,CAAA;IAClB,mBAAmB;IACnB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,GAAG,CAAA;QACX,OAAO,EAAE,GAAG,CAAA;QACZ,OAAO,EAAE,kBAAkB,CAAA;QAC3B,kBAAkB,CAAC,EAAE,GAAG,CAAA;KACzB,CAAA;IACD,iBAAiB;IACjB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,iBAAiB;IACjB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,cAAc;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,WAAW;IACX,gBAAgB,CAAC,EAAE,GAAG,CAAA;IACtB,WAAW;IACX,aAAa,CAAC,EAAE,KAAK,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,QAAQ,GAAG,GAAG;IAC/C,WAAW;IACX,EAAE,EAAE,MAAM,CAAA;IACV,WAAW;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW;IACX,OAAO,EAAE,QAAQ,CAAA;IACjB,YAAY;IACZ,OAAO,EAAE,kBAAkB,CAAA;IAC3B,WAAW;IACX,MAAM,EAAE,iBAAiB,CAAA;IACzB,aAAa;IACb,UAAU,EAAE;QACV,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,EAAE,CAAC,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,WAAW;IACX,MAAM,CAAC,EAAE,GAAG,CAAA;IACZ,WAAW;IACX,KAAK,CAAC,EAAE,KAAK,CAAA;IACb,mBAAmB;IACnB,kBAAkB,CAAC,EAAE,GAAG,CAAA;IACxB,eAAe;IACf,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;IACvC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,WAAW;IACX,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc;IACd,WAAW,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,CAAA;IAClC,eAAe;IACf,eAAe,CAAC,EAAE,eAAe,CAAA;IACjC,WAAW;IACX,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * CPU流水线核心类型定义
3
+ */
4
+ /**
5
+ * 流水线阶段
6
+ */
7
+ export const PipelineStage = {
8
+ IF: 'IF', // Instruction Fetch
9
+ SCH: 'SCH', // Scheduler
10
+ EX: 'EX', // Execute
11
+ RES: 'RES', // Response
12
+ WB: 'WB', // Write Back
13
+ };
14
+ /**
15
+ * 指令状态
16
+ */
17
+ export const InstructionStatus = {
18
+ PENDING: 'pending', // 在IF缓冲区等待调度
19
+ ISSUED: 'issued', // 已发射到EX阶段
20
+ EXECUTING: 'executing', // 正在执行
21
+ RESPONDED: 'responded', // 已收到响应
22
+ COMMITTED: 'committed', // 已提交完成
23
+ FAILED: 'failed', // 执行失败
24
+ CANCELLED: 'cancelled', // 被取消/丢弃(可能在任何阶段)
25
+ };
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,EAAE,EAAE,IAAI,EAAE,oBAAoB;IAC9B,GAAG,EAAE,KAAK,EAAE,YAAY;IACxB,EAAE,EAAE,IAAI,EAAE,UAAU;IACpB,GAAG,EAAE,KAAK,EAAE,WAAW;IACvB,EAAE,EAAE,IAAI,EAAE,aAAa;CACf,CAAA;AAIV;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,SAAS,EAAE,aAAa;IACjC,MAAM,EAAE,QAAQ,EAAE,WAAW;IAC7B,SAAS,EAAE,WAAW,EAAE,OAAO;IAC/B,SAAS,EAAE,WAAW,EAAE,QAAQ;IAChC,SAAS,EAAE,WAAW,EAAE,QAAQ;IAChC,MAAM,EAAE,QAAQ,EAAE,OAAO;IACzB,SAAS,EAAE,WAAW,EAAE,kBAAkB;CAClC,CAAA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * 指令取消管理器
3
+ *
4
+ * 提供统一的指令取消机制,可以在任何阶段取消指令
5
+ */
6
+ import type { QueuedInstruction } from '../types';
7
+ /**
8
+ * 取消指令
9
+ *
10
+ * @param instruction 要取消的指令
11
+ * @param reason 取消原因
12
+ * @param stage 取消发生的阶段
13
+ */
14
+ export declare function cancelInstruction(instruction: QueuedInstruction, reason: string, stage: 'SCH' | 'EX' | 'RES'): void;
15
+ /**
16
+ * 检查指令是否已被取消
17
+ */
18
+ export declare function isInstructionCancelled(instruction: QueuedInstruction): boolean;
19
+ /**
20
+ * 获取取消信息(用于日志)
21
+ */
22
+ export declare function getCancellationInfo(instruction: QueuedInstruction): {
23
+ cancelled: boolean;
24
+ reason?: string;
25
+ stage?: string;
26
+ };
27
+ /**
28
+ * 批量取消指令(用于 switchMap 等场景)
29
+ */
30
+ export declare function cancelInstructions(instructions: QueuedInstruction[], reason: string, stage: 'SCH' | 'EX' | 'RES'): void;
31
+ //# sourceMappingURL=InstructionCancellation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstructionCancellation.d.ts","sourceRoot":"","sources":["../../src/utils/InstructionCancellation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAGjD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,iBAAiB,EAC9B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAC1B,IAAI,CAcN;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAE9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG;IACnE,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAMA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,iBAAiB,EAAE,EACjC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAC1B,IAAI,CAMN"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * 指令取消管理器
3
+ *
4
+ * 提供统一的指令取消机制,可以在任何阶段取消指令
5
+ */
6
+ import { InstructionStatus } from '../types';
7
+ /**
8
+ * 取消指令
9
+ *
10
+ * @param instruction 要取消的指令
11
+ * @param reason 取消原因
12
+ * @param stage 取消发生的阶段
13
+ */
14
+ export function cancelInstruction(instruction, reason, stage) {
15
+ // 标记为已取消
16
+ instruction.cancelled = true;
17
+ instruction.cancelReason = reason;
18
+ instruction.cancelledAt = stage;
19
+ instruction.status = InstructionStatus.CANCELLED;
20
+ // 设置错误信息
21
+ instruction.error = new Error(`[${stage}] ${reason}`);
22
+ // 🔥 实际取消网络请求
23
+ if (instruction.abortController && !instruction.abortController.signal.aborted) {
24
+ instruction.abortController.abort(instruction.cancelReason);
25
+ }
26
+ }
27
+ /**
28
+ * 检查指令是否已被取消
29
+ */
30
+ export function isInstructionCancelled(instruction) {
31
+ return instruction.cancelled === true || instruction.status === InstructionStatus.CANCELLED;
32
+ }
33
+ /**
34
+ * 获取取消信息(用于日志)
35
+ */
36
+ export function getCancellationInfo(instruction) {
37
+ return {
38
+ cancelled: isInstructionCancelled(instruction),
39
+ reason: instruction.cancelReason,
40
+ stage: instruction.cancelledAt,
41
+ };
42
+ }
43
+ /**
44
+ * 批量取消指令(用于 switchMap 等场景)
45
+ */
46
+ export function cancelInstructions(instructions, reason, stage) {
47
+ for (const instruction of instructions) {
48
+ if (!isInstructionCancelled(instruction)) {
49
+ cancelInstruction(instruction, reason, stage);
50
+ }
51
+ }
52
+ }
53
+ //# sourceMappingURL=InstructionCancellation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstructionCancellation.js","sourceRoot":"","sources":["../../src/utils/InstructionCancellation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,WAA8B,EAC9B,MAAc,EACd,KAA2B;IAE3B,SAAS;IACT,WAAW,CAAC,SAAS,GAAG,IAAI,CAAA;IAC5B,WAAW,CAAC,YAAY,GAAG,MAAM,CAAA;IACjC,WAAW,CAAC,WAAW,GAAG,KAAK,CAAA;IAC/B,WAAW,CAAC,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAA;IAEhD,SAAS;IACT,WAAW,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC,CAAA;IAErD,cAAc;IACd,IAAI,WAAW,CAAC,eAAe,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/E,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAA;IAC7D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAA8B;IACnE,OAAO,WAAW,CAAC,SAAS,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,iBAAiB,CAAC,SAAS,CAAA;AAC7F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAA8B;IAKhE,OAAO;QACL,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC;QAC9C,MAAM,EAAE,WAAW,CAAC,YAAY;QAChC,KAAK,EAAE,WAAW,CAAC,WAAW;KAC/B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,YAAiC,EACjC,MAAc,EACd,KAA2B;IAE3B,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 可取消的 Promise 包装器
3
+ *
4
+ * 将任意 Promise 与 AbortSignal 结合,使其可以被外部取消
5
+ */
6
+ /**
7
+ * 将 Promise 包装为可取消的版本
8
+ *
9
+ * @param promise 原始 Promise
10
+ * @param abortSignal 取消信号
11
+ * @returns 可取消的 Promise
12
+ *
13
+ * 工作原理:
14
+ * - 使用 Promise.race 让 promise 和 abortPromise 竞争
15
+ * - 如果 abort 先触发,整个操作会立即被 reject
16
+ * - 如果 promise 先完成,正常返回结果
17
+ *
18
+ * 效果:
19
+ * - 对 fetch:网络请求会被立即取消
20
+ * - 对自定义 execute:即使不处理 signal,也会被中断
21
+ */
22
+ export declare function makeAbortable<T>(promise: Promise<T>, abortSignal?: AbortSignal): Promise<T>;
23
+ /**
24
+ * 创建一个可取消的延迟函数
25
+ *
26
+ * @param ms 延迟毫秒数
27
+ * @param abortSignal 取消信号
28
+ */
29
+ export declare function cancellableDelay(ms: number, abortSignal?: AbortSignal): Promise<void>;
30
+ //# sourceMappingURL=abortable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable.d.ts","sourceRoot":"","sources":["../../src/utils/abortable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,CAAC,CAAC,CAgBZ;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrF"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * 可取消的 Promise 包装器
3
+ *
4
+ * 将任意 Promise 与 AbortSignal 结合,使其可以被外部取消
5
+ */
6
+ /**
7
+ * 将 AbortSignal 转换为 Promise
8
+ * 当 abort 事件触发时,Promise 会 reject
9
+ */
10
+ function abortSignalToPromise(signal) {
11
+ return new Promise((_, reject) => {
12
+ // 如果已经被 abort,立即 reject
13
+ if (signal.aborted) {
14
+ reject(new Error('Operation was aborted'));
15
+ return;
16
+ }
17
+ // 监听 abort 事件
18
+ const abortHandler = () => {
19
+ reject(new Error('Operation was aborted'));
20
+ };
21
+ signal.addEventListener('abort', abortHandler, { once: true });
22
+ });
23
+ }
24
+ /**
25
+ * 将 Promise 包装为可取消的版本
26
+ *
27
+ * @param promise 原始 Promise
28
+ * @param abortSignal 取消信号
29
+ * @returns 可取消的 Promise
30
+ *
31
+ * 工作原理:
32
+ * - 使用 Promise.race 让 promise 和 abortPromise 竞争
33
+ * - 如果 abort 先触发,整个操作会立即被 reject
34
+ * - 如果 promise 先完成,正常返回结果
35
+ *
36
+ * 效果:
37
+ * - 对 fetch:网络请求会被立即取消
38
+ * - 对自定义 execute:即使不处理 signal,也会被中断
39
+ */
40
+ export function makeAbortable(promise, abortSignal) {
41
+ // 如果没有提供 signal,直接返回原 promise
42
+ if (!abortSignal) {
43
+ return promise;
44
+ }
45
+ // 如果 signal 已经 aborted,立即 reject
46
+ if (abortSignal.aborted) {
47
+ return Promise.reject(new Error('Operation was aborted'));
48
+ }
49
+ // 使用 Promise.race 让执行和取消竞争
50
+ return Promise.race([
51
+ promise,
52
+ abortSignalToPromise(abortSignal)
53
+ ]);
54
+ }
55
+ /**
56
+ * 创建一个可取消的延迟函数
57
+ *
58
+ * @param ms 延迟毫秒数
59
+ * @param abortSignal 取消信号
60
+ */
61
+ export function cancellableDelay(ms, abortSignal) {
62
+ return new Promise((resolve, reject) => {
63
+ if (abortSignal?.aborted) {
64
+ reject(new Error('Operation was aborted'));
65
+ return;
66
+ }
67
+ const timeoutId = setTimeout(() => {
68
+ resolve();
69
+ }, ms);
70
+ abortSignal?.addEventListener('abort', () => {
71
+ clearTimeout(timeoutId);
72
+ reject(new Error('Operation was aborted'));
73
+ }, { once: true });
74
+ });
75
+ }
76
+ //# sourceMappingURL=abortable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable.js","sourceRoot":"","sources":["../../src/utils/abortable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,SAAS,oBAAoB,CAAC,MAAmB;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC/B,wBAAwB;QACxB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QAED,cAAc;QACd,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAC5C,CAAC,CAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,aAAa,CAC3B,OAAmB,EACnB,WAAyB;IAEzB,8BAA8B;IAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,2BAA2B;IAC3B,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO;QACP,oBAAoB,CAAC,WAAW,CAAC;KAClC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,WAAyB;IACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;YAC1C,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE,CAAA;QACX,CAAC,EAAE,EAAE,CAAC,CAAA;QAEN,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC1C,YAAY,CAAC,SAAS,CAAC,CAAA;YACvB,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAC5C,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * FrontCPU 统一请求工具(解耦版)
3
+ *
4
+ * 通过依赖注入实现HTTP客户端解耦
5
+ *
6
+ * 支持:
7
+ * 1. 单个请求
8
+ * 2. 多个请求(并发/串行)
9
+ * 3. 自动添加 correlation-id
10
+ */
11
+ import type { IHttpClient } from '../interfaces';
12
+ import type { InstructionContext } from '../types';
13
+ import type { RequestConfig, MultiRequestConfig } from '../isa/types';
14
+ /**
15
+ * 设置HTTP客户端(必须在使用前调用)
16
+ */
17
+ export declare function setHttpClient(client: IHttpClient): void;
18
+ /**
19
+ * 执行 HTTP 请求(单个或多个)
20
+ *
21
+ * @param config 请求配置(单个或多个)
22
+ * @param payload 指令负载
23
+ * @param context 指令上下文
24
+ * @returns 请求结果
25
+ */
26
+ export declare function executeRequest(config: RequestConfig | MultiRequestConfig, payload: any, context: InstructionContext, abortSignal?: AbortSignal): Promise<any>;
27
+ //# sourceMappingURL=request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAKrE;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAEvD;AA0DD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAC1C,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,kBAAkB,EAC3B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,GAAG,CAAC,CA8Bd"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * FrontCPU 统一请求工具(解耦版)
3
+ *
4
+ * 通过依赖注入实现HTTP客户端解耦
5
+ *
6
+ * 支持:
7
+ * 1. 单个请求
8
+ * 2. 多个请求(并发/串行)
9
+ * 3. 自动添加 correlation-id
10
+ */
11
+ // 全局HTTP客户端(通过setHttpClient注入)
12
+ let httpClient = null;
13
+ /**
14
+ * 设置HTTP客户端(必须在使用前调用)
15
+ */
16
+ export function setHttpClient(client) {
17
+ httpClient = client;
18
+ }
19
+ /**
20
+ * 执行单个 HTTP 请求
21
+ */
22
+ async function executeSingleRequest(config, payload, context, abortSignal) {
23
+ if (!httpClient) {
24
+ throw new Error('HttpClient未初始化,请先调用setHttpClient()');
25
+ }
26
+ // 解析 URL
27
+ const url = typeof config.url === 'function' ? config.url(payload) : config.url;
28
+ // 解析请求体
29
+ const body = config.body ? config.body(payload) : payload;
30
+ // 统一添加 correlation-id
31
+ const headers = {
32
+ 'X-Correlation-ID': context.correlationId,
33
+ ...config.headers,
34
+ };
35
+ const requestConfig = {
36
+ headers,
37
+ signal: abortSignal // 传递取消信号
38
+ };
39
+ // 根据方法执行请求
40
+ switch (config.method) {
41
+ case 'GET':
42
+ return await httpClient.get(url, requestConfig);
43
+ case 'POST':
44
+ return await httpClient.post(url, body, requestConfig);
45
+ case 'PUT':
46
+ return await httpClient.put(url, body, requestConfig);
47
+ case 'PATCH':
48
+ return await httpClient.patch(url, body, requestConfig);
49
+ case 'DELETE':
50
+ return await httpClient.delete(url, requestConfig);
51
+ default:
52
+ throw new Error(`Unsupported HTTP method: ${config.method}`);
53
+ }
54
+ }
55
+ /**
56
+ * 判断是否是多请求配置
57
+ */
58
+ function isMultiRequestConfig(config) {
59
+ return 'requests' in config && Array.isArray(config.requests);
60
+ }
61
+ /**
62
+ * 执行 HTTP 请求(单个或多个)
63
+ *
64
+ * @param config 请求配置(单个或多个)
65
+ * @param payload 指令负载
66
+ * @param context 指令上下文
67
+ * @returns 请求结果
68
+ */
69
+ export async function executeRequest(config, payload, context, abortSignal) {
70
+ // 单个请求
71
+ if (!isMultiRequestConfig(config)) {
72
+ return await executeSingleRequest(config, payload, context, abortSignal);
73
+ }
74
+ // 多个请求
75
+ const { requests, mode, combineResults } = config;
76
+ let results;
77
+ if (mode === 'parallel') {
78
+ // 🔥 并发执行所有请求
79
+ results = await Promise.all(requests.map((req) => executeSingleRequest(req, payload, context, abortSignal)));
80
+ }
81
+ else {
82
+ // 🔥 串行执行所有请求
83
+ results = [];
84
+ for (const req of requests) {
85
+ const result = await executeSingleRequest(req, payload, context, abortSignal);
86
+ results.push(result);
87
+ }
88
+ }
89
+ // 合并结果(如果提供了合并函数)
90
+ if (combineResults) {
91
+ return combineResults(results);
92
+ }
93
+ // 默认:返回结果数组
94
+ return results;
95
+ }
96
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"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"}