@anov/3d 0.0.322 → 0.0.323
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/dist/anov3d.js +8 -64
- package/dist/anov3d.js.map +1 -1
- package/dist/applicationApi.js +16 -50
- package/dist/applicationApi.js.map +1 -1
- package/dist/applicationApiType.js.map +1 -1
- package/dist/hooksManager.js +35 -43
- package/dist/hooksManager.js.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/module/animation/motion/index.js +4 -2
- package/dist/module/animation/motion/index.js.map +1 -1
- package/dist/module/camera/index.js.map +1 -1
- package/dist/module/entity/area/index.js +3 -3
- package/dist/module/entity/area/index.js.map +1 -1
- package/dist/module/entity/baseEntity.js +4 -13
- package/dist/module/entity/baseEntity.js.map +1 -1
- package/dist/module/entity/batch/index.js +10 -12
- package/dist/module/entity/batch/index.js.map +1 -1
- package/dist/module/entity/flyline/index.js +3 -3
- package/dist/module/entity/flyline/index.js.map +1 -1
- package/dist/module/entity/group/index.js +4 -18
- package/dist/module/entity/group/index.js.map +1 -1
- package/dist/module/entity/heatmap/index.js +4 -16
- package/dist/module/entity/heatmap/index.js.map +1 -1
- package/dist/module/entity/index.js +12 -13
- package/dist/module/entity/index.js.map +1 -1
- package/dist/module/entity/infoPanel/index.js +2 -2
- package/dist/module/entity/infoPanel/index.js.map +1 -1
- package/dist/module/entity/light/pointLight/index.js +2 -2
- package/dist/module/entity/light/pointLight/index.js.map +1 -1
- package/dist/module/entity/mark/index.js +14 -11
- package/dist/module/entity/mark/index.js.map +1 -1
- package/dist/module/entity/model/index.js +12 -29
- package/dist/module/entity/model/index.js.map +1 -1
- package/dist/module/entity/model/load/loadFbx.js +1 -1
- package/dist/module/entity/model/load/loadFbx.js.map +1 -1
- package/dist/module/entity/model/load/loadGlb.js +11 -6
- package/dist/module/entity/model/load/loadGlb.js.map +1 -1
- package/dist/module/entity/poi/index.js +3 -3
- package/dist/module/entity/poi/index.js.map +1 -1
- package/dist/module/entity/shape/index.js +14 -16
- package/dist/module/entity/shape/index.js.map +1 -1
- package/dist/module/entity/spline/index.js +4 -4
- package/dist/module/entity/spline/index.js.map +1 -1
- package/dist/module/entity/strategy.js.map +1 -1
- package/dist/module/entity/traffic/realismTraffic/index.js +5 -17
- package/dist/module/entity/traffic/realismTraffic/index.js.map +1 -1
- package/dist/module/entity/traffic/streamerTraffic/index.js +4 -16
- package/dist/module/entity/traffic/streamerTraffic/index.js.map +1 -1
- package/dist/module/entity/videoPanel/index.js +3 -3
- package/dist/module/entity/videoPanel/index.js.map +1 -1
- package/dist/module/environment/index.js +4 -3
- package/dist/module/environment/index.js.map +1 -1
- package/dist/module/environment/season/index.js +1 -1
- package/dist/module/environment/season/index.js.map +1 -1
- package/dist/module/eventBus/index.js +4 -3
- package/dist/module/eventBus/index.js.map +1 -1
- package/dist/module/material/index.js +6 -5
- package/dist/module/material/index.js.map +1 -1
- package/dist/module/scene/fileParse.js +16 -21
- package/dist/module/scene/fileParse.js.map +1 -1
- package/dist/module/scene/index.js +10 -9
- package/dist/module/scene/index.js.map +1 -1
- package/dist/sdkEntry.js +32 -25
- package/dist/sdkEntry.js.map +1 -1
- package/dist/utils/messageFn.js +11 -21
- package/dist/utils/messageFn.js.map +1 -1
- package/package.json +4 -5
- package/dist/__mocks__/ability-mock.js +0 -124
- package/dist/__mocks__/ability-mock.js.map +0 -1
- package/dist/__mocks__/geo-3d-mock.js +0 -10
- package/dist/__mocks__/geo-3d-mock.js.map +0 -1
- package/dist/module/message/hub.js +0 -178
- package/dist/module/message/hub.js.map +0 -1
- package/dist/utils/debugTools.js +0 -364
- package/dist/utils/debugTools.js.map +0 -1
- package/dist/utils/messageTracer.js +0 -369
- package/dist/utils/messageTracer.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["messageTracer","DebugTools","_classCallCheck","_createClass","key","value","printTraces","traces","getAllTraces","console","table","map","t","ID","id","Name","name","Status","status","Duration","duration","concat","Timestamp","Date","timestamp","toLocaleTimeString","printFailures","_this","failed","getFailedTraces","length","log","group","forEach","trace","error","params","chain","getMessageChain","i","prefix","repeat","stack","groupEnd","printPending","pending","getPendingTraces","warn","Age","now","report","generateReport","_export","data","export","blob","Blob","type","url","URL","createObjectURL","a","document","createElement","href","download","click","revokeObjectURL","clear","currentId","getTrace","unshift","parentId","find","nameOrId","results","filter","includes","inspect","toLocaleString","result","stats","completed","undefined","durations","total","avgDuration","reduce","b","minDuration","Math","min","apply","_toConsumableArray","maxDuration","max","byName","Map","has","set","get","push","perfData","Array","from","entries","_ref","_ref2","_slicedToArray","Count","Avg","toFixed","Min","Max","enableTracing","enabled","arguments","configure","setLogLevel","level","levels","DEBUG","INFO","WARN","ERROR","NONE","logLevel","slowMessages","threshold","slow","help","window","process","env","NODE_ENV"],"sources":["../../src/utils/debugTools.ts"],"sourcesContent":["/**\n * 开发者调试工具\n * 提供便捷的调试方法,可在浏览器控制台直接使用\n */\n\nimport { messageTracer } from './messageTracer'\nimport { logger } from './logger'\n\nexport class DebugTools {\n /**\n * 打印所有消息追踪记录\n */\n static printTraces() {\n const traces = messageTracer.getAllTraces()\n console.table(traces.map(t => ({\n ID: t.id,\n Name: t.name,\n Status: t.status,\n Duration: t.duration ? `${t.duration}ms` : '-',\n Timestamp: new Date(t.timestamp).toLocaleTimeString(),\n })))\n }\n\n /**\n * 打印失败的消息\n */\n static printFailures() {\n const failed = messageTracer.getFailedTraces()\n \n if (failed.length === 0) {\n console.log('✅ No failed messages')\n return\n }\n\n console.group('❌ Failed Messages')\n failed.forEach((trace) => {\n console.group(`${trace.name} (${trace.id})`)\n console.log('Error:', trace.error)\n console.log('Params:', trace.params)\n console.log('Duration:', `${trace.duration}ms`)\n \n // 打印消息链\n const chain = this.getMessageChain(trace.id)\n if (chain.length > 1) {\n console.log('Message Chain:')\n chain.forEach((t, i) => {\n const prefix = ' '.repeat(i) + '└─'\n console.log(`${prefix} ${t.name} (${t.status})`)\n })\n }\n \n // 打印调用栈\n if (trace.stack) {\n console.log('Call Stack:')\n console.log(trace.stack)\n }\n \n console.groupEnd()\n })\n console.groupEnd()\n }\n\n /**\n * 打印待处理的消息\n */\n static printPending() {\n const pending = messageTracer.getPendingTraces()\n \n if (pending.length === 0) {\n console.log('✅ No pending messages')\n return\n }\n\n console.warn(`⏳ ${pending.length} pending messages:`)\n console.table(pending.map(t => ({\n ID: t.id,\n Name: t.name,\n Age: `${Date.now() - t.timestamp}ms`,\n Timestamp: new Date(t.timestamp).toLocaleTimeString(),\n })))\n }\n\n /**\n * 生成调试报告\n */\n static report() {\n console.log(messageTracer.generateReport())\n }\n\n /**\n * 导出追踪数据\n */\n static export() {\n const data = messageTracer.export()\n const blob = new Blob([data], { type: 'application/json' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `message-traces-${Date.now()}.json`\n a.click()\n URL.revokeObjectURL(url)\n console.log('✅ Traces exported')\n }\n\n /**\n * 清空追踪记录\n */\n static clear() {\n messageTracer.clear()\n console.log('✅ Traces cleared')\n }\n\n /**\n * 获取消息链\n */\n private static getMessageChain(id: string) {\n const chain: any[] = []\n let currentId: string | undefined = id\n\n while (currentId) {\n const trace = messageTracer.getTrace(currentId)\n if (!trace) break\n chain.unshift(trace)\n currentId = trace.parentId\n }\n\n return chain\n }\n\n /**\n * 查找特定消息\n */\n static find(nameOrId: string) {\n const traces = messageTracer.getAllTraces()\n const results = traces.filter(t => \n t.name.includes(nameOrId) || t.id.includes(nameOrId)\n )\n\n if (results.length === 0) {\n console.log('No matching messages found')\n return\n }\n\n console.table(results.map(t => ({\n ID: t.id,\n Name: t.name,\n Status: t.status,\n Duration: t.duration ? `${t.duration}ms` : '-',\n })))\n\n return results\n }\n\n /**\n * 查看消息详情\n */\n static inspect(id: string) {\n const trace = messageTracer.getTrace(id)\n \n if (!trace) {\n console.error(`Message ${id} not found`)\n return\n }\n\n console.group(`📋 Message Details: ${trace.name}`)\n console.log('ID:', trace.id)\n console.log('Status:', trace.status)\n console.log('Duration:', trace.duration ? `${trace.duration}ms` : 'pending')\n console.log('Timestamp:', new Date(trace.timestamp).toLocaleString())\n console.log('Params:', trace.params)\n \n if (trace.result) {\n console.log('Result:', trace.result)\n }\n \n if (trace.error) {\n console.log('Error:', trace.error)\n }\n\n // 消息链\n const chain = this.getMessageChain(id)\n if (chain.length > 1) {\n console.log('Message Chain:')\n chain.forEach((t, i) => {\n const prefix = ' '.repeat(i) + '└─'\n console.log(`${prefix} ${t.name} (${t.status})`)\n })\n }\n\n // 调用栈\n if (trace.stack) {\n console.log('Call Stack:')\n console.log(trace.stack)\n }\n\n console.groupEnd()\n }\n\n /**\n * 性能统计\n */\n static stats() {\n const traces = messageTracer.getAllTraces()\n \n if (traces.length === 0) {\n console.log('No traces available')\n return\n }\n\n const completed = traces.filter(t => t.duration !== undefined)\n const durations = completed.map(t => t.duration!)\n \n const stats = {\n total: traces.length,\n completed: completed.length,\n pending: traces.filter(t => t.status === 'pending').length,\n failed: traces.filter(t => t.status === 'error').length,\n avgDuration: durations.reduce((a, b) => a + b, 0) / durations.length,\n minDuration: Math.min(...durations),\n maxDuration: Math.max(...durations),\n }\n\n console.table(stats)\n\n // 按消息名称分组统计\n const byName = new Map<string, number[]>()\n completed.forEach((t) => {\n if (!byName.has(t.name)) {\n byName.set(t.name, [])\n }\n byName.get(t.name)!.push(t.duration!)\n })\n\n console.log('\\n📊 Performance by Message Type:')\n const perfData = Array.from(byName.entries()).map(([name, durations]) => ({\n Name: name,\n Count: durations.length,\n Avg: `${(durations.reduce((a, b) => a + b, 0) / durations.length).toFixed(2)}ms`,\n Min: `${Math.min(...durations)}ms`,\n Max: `${Math.max(...durations)}ms`,\n }))\n console.table(perfData)\n }\n\n /**\n * 启用/禁用追踪\n */\n static enableTracing(enabled: boolean = true) {\n messageTracer.configure({ enabled })\n console.log(`✅ Message tracing ${enabled ? 'enabled' : 'disabled'}`)\n }\n\n /**\n * 设置日志级别\n */\n static setLogLevel(level: 'DEBUG' | 'INFO' | 'WARN' | 'ERROR' | 'NONE') {\n const levels = {\n DEBUG: 0,\n INFO: 1,\n WARN: 2,\n ERROR: 3,\n NONE: 4,\n }\n messageTracer.configure({ logLevel: levels[level] })\n console.log(`✅ Log level set to ${level}`)\n }\n\n /**\n * 监控慢消息\n */\n static slowMessages(threshold: number = 1000) {\n const traces = messageTracer.getAllTraces()\n const slow = traces.filter(t => t.duration && t.duration > threshold)\n\n if (slow.length === 0) {\n console.log(`✅ No messages slower than ${threshold}ms`)\n return\n }\n\n console.warn(`🐌 ${slow.length} slow messages (>${threshold}ms):`)\n console.table(slow.map(t => ({\n Name: t.name,\n Duration: `${t.duration}ms`,\n ID: t.id,\n })))\n }\n\n /**\n * 显示帮助信息\n */\n static help() {\n console.log(`\n🛠️ Anov3D Debug Tools\n\nAvailable Commands:\n DebugTools.printTraces() - 打印所有消息追踪记录\n DebugTools.printFailures() - 打印失败的消息\n DebugTools.printPending() - 打印待处理的消息\n DebugTools.report() - 生成调试报告\n DebugTools.export() - 导出追踪数据\n DebugTools.clear() - 清空追踪记录\n DebugTools.find(nameOrId) - 查找特定消息\n DebugTools.inspect(id) - 查看消息详情\n DebugTools.stats() - 性能统计\n DebugTools.slowMessages(ms) - 查找慢消息\n DebugTools.enableTracing(bool) - 启用/禁用追踪\n DebugTools.setLogLevel(level) - 设置日志级别\n DebugTools.help() - 显示此帮助信息\n\nExamples:\n DebugTools.find('entity.create')\n DebugTools.inspect('message-id-123')\n DebugTools.slowMessages(500)\n DebugTools.setLogLevel('DEBUG')\n `)\n }\n}\n\n// 在开发环境自动暴露到全局\nif (typeof window !== 'undefined' && process.env.NODE_ENV !== 'production') {\n // @ts-ignore\n window.DebugTools = DebugTools\n console.log('🛠️ Debug tools available. Type DebugTools.help() for usage.')\n}\n"],"mappings":"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"}
|
|
@@ -1,369 +0,0 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
5
|
-
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
|
|
6
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
|
7
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
9
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
10
|
-
/**
|
|
11
|
-
* 消息追踪系统
|
|
12
|
-
* 用于调试消息驱动架构中的消息流转和错误定位
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
export var LogLevel = /*#__PURE__*/function (LogLevel) {
|
|
16
|
-
LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
|
|
17
|
-
LogLevel[LogLevel["INFO"] = 1] = "INFO";
|
|
18
|
-
LogLevel[LogLevel["WARN"] = 2] = "WARN";
|
|
19
|
-
LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
|
|
20
|
-
LogLevel[LogLevel["NONE"] = 4] = "NONE";
|
|
21
|
-
return LogLevel;
|
|
22
|
-
}({});
|
|
23
|
-
var MessageTracer = /*#__PURE__*/function () {
|
|
24
|
-
function MessageTracer() {
|
|
25
|
-
_classCallCheck(this, MessageTracer);
|
|
26
|
-
_defineProperty(this, "traces", new Map());
|
|
27
|
-
_defineProperty(this, "config", {
|
|
28
|
-
enabled: true,
|
|
29
|
-
logLevel: LogLevel.INFO,
|
|
30
|
-
maxTraces: 1000,
|
|
31
|
-
captureStack: true,
|
|
32
|
-
logToConsole: true,
|
|
33
|
-
persistToStorage: false
|
|
34
|
-
});
|
|
35
|
-
_defineProperty(this, "currentMessageId", null);
|
|
36
|
-
_defineProperty(this, "messageChain", []);
|
|
37
|
-
}
|
|
38
|
-
_createClass(MessageTracer, [{
|
|
39
|
-
key: "configure",
|
|
40
|
-
value: function configure(config) {
|
|
41
|
-
this.config = _objectSpread(_objectSpread({}, this.config), config);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* 开始追踪一个消息
|
|
46
|
-
*/
|
|
47
|
-
}, {
|
|
48
|
-
key: "startTrace",
|
|
49
|
-
value: function startTrace(id, name, params) {
|
|
50
|
-
console.log("🚀 ~ MessageTracer ~ startTrace ~ id:", id);
|
|
51
|
-
if (!this.config.enabled) return;
|
|
52
|
-
var trace = {
|
|
53
|
-
id: id,
|
|
54
|
-
name: name,
|
|
55
|
-
params: this.sanitizeParams(params),
|
|
56
|
-
timestamp: Date.now(),
|
|
57
|
-
stack: this.config.captureStack ? this.captureStack() : '',
|
|
58
|
-
parentId: this.currentMessageId || undefined,
|
|
59
|
-
status: 'pending'
|
|
60
|
-
};
|
|
61
|
-
this.traces.set(id, trace);
|
|
62
|
-
|
|
63
|
-
// 维护消息链
|
|
64
|
-
if (this.currentMessageId) {
|
|
65
|
-
this.messageChain.push(this.currentMessageId);
|
|
66
|
-
}
|
|
67
|
-
this.currentMessageId = id;
|
|
68
|
-
|
|
69
|
-
// 限制追踪数量
|
|
70
|
-
if (this.traces.size > this.config.maxTraces) {
|
|
71
|
-
var firstKey = this.traces.keys().next().value;
|
|
72
|
-
this.traces.delete(firstKey);
|
|
73
|
-
}
|
|
74
|
-
this.log(LogLevel.DEBUG, "\uD83D\uDCE8 Message started: ".concat(name), {
|
|
75
|
-
id: id,
|
|
76
|
-
params: trace.params,
|
|
77
|
-
chain: this.getMessageChain(id)
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* 标记消息成功完成
|
|
83
|
-
*/
|
|
84
|
-
}, {
|
|
85
|
-
key: "endTrace",
|
|
86
|
-
value: function endTrace(id, result) {
|
|
87
|
-
if (!this.config.enabled) return;
|
|
88
|
-
var trace = this.traces.get(id);
|
|
89
|
-
if (!trace) return;
|
|
90
|
-
trace.status = 'success';
|
|
91
|
-
trace.duration = Date.now() - trace.timestamp;
|
|
92
|
-
trace.result = this.sanitizeParams(result);
|
|
93
|
-
this.log(LogLevel.INFO, "\u2705 Message completed: ".concat(trace.name), {
|
|
94
|
-
id: id,
|
|
95
|
-
duration: "".concat(trace.duration, "ms"),
|
|
96
|
-
result: trace.result
|
|
97
|
-
});
|
|
98
|
-
|
|
99
|
-
// 恢复消息链
|
|
100
|
-
if (this.currentMessageId === id) {
|
|
101
|
-
this.currentMessageId = this.messageChain.pop() || null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// 持久化
|
|
105
|
-
if (this.config.persistToStorage) {
|
|
106
|
-
this.persistTrace(trace);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* 标记消息执行失败
|
|
112
|
-
*/
|
|
113
|
-
}, {
|
|
114
|
-
key: "errorTrace",
|
|
115
|
-
value: function errorTrace(id, error) {
|
|
116
|
-
if (!this.config.enabled) return;
|
|
117
|
-
var trace = this.traces.get(id);
|
|
118
|
-
if (!trace) return;
|
|
119
|
-
trace.status = 'error';
|
|
120
|
-
trace.duration = Date.now() - trace.timestamp;
|
|
121
|
-
trace.error = {
|
|
122
|
-
message: (error === null || error === void 0 ? void 0 : error.message) || String(error),
|
|
123
|
-
stack: error === null || error === void 0 ? void 0 : error.stack,
|
|
124
|
-
name: error === null || error === void 0 ? void 0 : error.name
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
// 构建完整的错误上下文
|
|
128
|
-
var errorContext = this.buildErrorContext(trace);
|
|
129
|
-
this.log(LogLevel.ERROR, "\u274C Message failed: ".concat(trace.name), errorContext);
|
|
130
|
-
|
|
131
|
-
// 恢复消息链
|
|
132
|
-
if (this.currentMessageId === id) {
|
|
133
|
-
this.currentMessageId = this.messageChain.pop() || null;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
// 持久化错误
|
|
137
|
-
if (this.config.persistToStorage) {
|
|
138
|
-
this.persistTrace(trace);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* 构建错误上下文,包含完整的消息链信息
|
|
144
|
-
*/
|
|
145
|
-
}, {
|
|
146
|
-
key: "buildErrorContext",
|
|
147
|
-
value: function buildErrorContext(trace) {
|
|
148
|
-
var chain = this.getMessageChain(trace.id);
|
|
149
|
-
var context = {
|
|
150
|
-
id: trace.id,
|
|
151
|
-
name: trace.name,
|
|
152
|
-
params: trace.params,
|
|
153
|
-
duration: "".concat(trace.duration, "ms"),
|
|
154
|
-
error: trace.error,
|
|
155
|
-
messageChain: chain.map(function (t) {
|
|
156
|
-
return {
|
|
157
|
-
name: t.name,
|
|
158
|
-
id: t.id,
|
|
159
|
-
duration: t.duration ? "".concat(t.duration, "ms") : 'pending'
|
|
160
|
-
};
|
|
161
|
-
}),
|
|
162
|
-
callStack: trace.stack
|
|
163
|
-
};
|
|
164
|
-
return context;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* 获取消息调用链
|
|
169
|
-
* 添加了循环引用检测和深度限制,防止无限递归
|
|
170
|
-
*/
|
|
171
|
-
}, {
|
|
172
|
-
key: "getMessageChain",
|
|
173
|
-
value: function getMessageChain(id) {
|
|
174
|
-
var chain = [];
|
|
175
|
-
var visited = new Set();
|
|
176
|
-
var currentId = id;
|
|
177
|
-
var maxDepth = 100; // 防止无限循环和过深的调用链
|
|
178
|
-
|
|
179
|
-
while (currentId && chain.length < maxDepth) {
|
|
180
|
-
// 检测循环引用
|
|
181
|
-
if (visited.has(currentId)) {
|
|
182
|
-
console.warn("[MessageTracer] Circular reference detected in message chain: ".concat(currentId));
|
|
183
|
-
break;
|
|
184
|
-
}
|
|
185
|
-
visited.add(currentId);
|
|
186
|
-
var trace = this.traces.get(currentId);
|
|
187
|
-
if (!trace) break;
|
|
188
|
-
chain.unshift(trace);
|
|
189
|
-
currentId = trace.parentId;
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// 如果达到最大深度,发出警告
|
|
193
|
-
if (chain.length >= maxDepth) {
|
|
194
|
-
console.warn("[MessageTracer] Message chain exceeded max depth (".concat(maxDepth, "). Chain may be incomplete."));
|
|
195
|
-
}
|
|
196
|
-
return chain;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* 捕获调用栈
|
|
201
|
-
*/
|
|
202
|
-
}, {
|
|
203
|
-
key: "captureStack",
|
|
204
|
-
value: function captureStack() {
|
|
205
|
-
var stack = new Error().stack || '';
|
|
206
|
-
// 移除 tracer 自身的栈帧
|
|
207
|
-
return stack.split('\n').slice(3).join('\n');
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
/**
|
|
211
|
-
* 清理敏感参数
|
|
212
|
-
*/
|
|
213
|
-
}, {
|
|
214
|
-
key: "sanitizeParams",
|
|
215
|
-
value: function sanitizeParams(params) {
|
|
216
|
-
if (!params) return params;
|
|
217
|
-
|
|
218
|
-
// 避免循环引用和大对象
|
|
219
|
-
try {
|
|
220
|
-
return JSON.parse(JSON.stringify(params, function (key, value) {
|
|
221
|
-
// 过滤掉可能的敏感信息
|
|
222
|
-
if (key.toLowerCase().includes('password') || key.toLowerCase().includes('token')) return '[REDACTED]';
|
|
223
|
-
|
|
224
|
-
// 限制字符串长度
|
|
225
|
-
if (typeof value === 'string' && value.length > 500) return "".concat(value.substring(0, 500), "... (truncated)");
|
|
226
|
-
return value;
|
|
227
|
-
}));
|
|
228
|
-
} catch (_unused) {
|
|
229
|
-
return '[Unable to serialize]';
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* 分级日志输出
|
|
235
|
-
*/
|
|
236
|
-
}, {
|
|
237
|
-
key: "log",
|
|
238
|
-
value: function log(level, message, data) {
|
|
239
|
-
if (!this.config.logToConsole || level < this.config.logLevel) return;
|
|
240
|
-
var timestamp = new Date().toISOString();
|
|
241
|
-
var prefix = "[".concat(timestamp, "]");
|
|
242
|
-
switch (level) {
|
|
243
|
-
case LogLevel.DEBUG:
|
|
244
|
-
console.debug(prefix, message, data);
|
|
245
|
-
break;
|
|
246
|
-
case LogLevel.INFO:
|
|
247
|
-
console.info(prefix, message, data);
|
|
248
|
-
break;
|
|
249
|
-
case LogLevel.WARN:
|
|
250
|
-
console.warn(prefix, message, data);
|
|
251
|
-
break;
|
|
252
|
-
case LogLevel.ERROR:
|
|
253
|
-
console.error(prefix, message, data);
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/**
|
|
259
|
-
* 持久化追踪记录
|
|
260
|
-
*/
|
|
261
|
-
}, {
|
|
262
|
-
key: "persistTrace",
|
|
263
|
-
value: function persistTrace(trace) {
|
|
264
|
-
try {
|
|
265
|
-
var key = "message_trace_".concat(trace.id);
|
|
266
|
-
var data = JSON.stringify(trace);
|
|
267
|
-
localStorage.setItem(key, data);
|
|
268
|
-
} catch (error) {
|
|
269
|
-
console.warn('Failed to persist trace:', error);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* 获取所有追踪记录
|
|
275
|
-
*/
|
|
276
|
-
}, {
|
|
277
|
-
key: "getAllTraces",
|
|
278
|
-
value: function getAllTraces() {
|
|
279
|
-
return Array.from(this.traces.values());
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
/**
|
|
283
|
-
* 获取特定消息的追踪记录
|
|
284
|
-
*/
|
|
285
|
-
}, {
|
|
286
|
-
key: "getTrace",
|
|
287
|
-
value: function getTrace(id) {
|
|
288
|
-
return this.traces.get(id);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
/**
|
|
292
|
-
* 获取失败的消息
|
|
293
|
-
*/
|
|
294
|
-
}, {
|
|
295
|
-
key: "getFailedTraces",
|
|
296
|
-
value: function getFailedTraces() {
|
|
297
|
-
return this.getAllTraces().filter(function (t) {
|
|
298
|
-
return t.status === 'error';
|
|
299
|
-
});
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* 获取待处理的消息
|
|
304
|
-
*/
|
|
305
|
-
}, {
|
|
306
|
-
key: "getPendingTraces",
|
|
307
|
-
value: function getPendingTraces() {
|
|
308
|
-
return this.getAllTraces().filter(function (t) {
|
|
309
|
-
return t.status === 'pending';
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
/**
|
|
314
|
-
* 清空追踪记录
|
|
315
|
-
*/
|
|
316
|
-
}, {
|
|
317
|
-
key: "clear",
|
|
318
|
-
value: function clear() {
|
|
319
|
-
this.traces.clear();
|
|
320
|
-
this.currentMessageId = null;
|
|
321
|
-
this.messageChain = [];
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
/**
|
|
325
|
-
* 导出追踪数据(用于调试)
|
|
326
|
-
*/
|
|
327
|
-
}, {
|
|
328
|
-
key: "export",
|
|
329
|
-
value: function _export() {
|
|
330
|
-
return JSON.stringify({
|
|
331
|
-
traces: this.getAllTraces(),
|
|
332
|
-
config: this.config,
|
|
333
|
-
timestamp: Date.now()
|
|
334
|
-
}, null, 2);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
/**
|
|
338
|
-
* 生成调试报告
|
|
339
|
-
*/
|
|
340
|
-
}, {
|
|
341
|
-
key: "generateReport",
|
|
342
|
-
value: function generateReport() {
|
|
343
|
-
var traces = this.getAllTraces();
|
|
344
|
-
var failed = this.getFailedTraces();
|
|
345
|
-
var pending = this.getPendingTraces();
|
|
346
|
-
var avgDuration = traces.filter(function (t) {
|
|
347
|
-
return t.duration;
|
|
348
|
-
}).reduce(function (sum, t) {
|
|
349
|
-
return sum + (t.duration || 0);
|
|
350
|
-
}, 0) / traces.length;
|
|
351
|
-
return "\n=== Message Tracer Report ===\nTotal Messages: ".concat(traces.length, "\nFailed: ").concat(failed.length, "\nPending: ").concat(pending.length, "\nAverage Duration: ").concat(avgDuration.toFixed(2), "ms\n\nFailed Messages:\n").concat(failed.map(function (t) {
|
|
352
|
-
var _t$error;
|
|
353
|
-
return " - ".concat(t.name, " (").concat(t.id, "): ").concat((_t$error = t.error) === null || _t$error === void 0 ? void 0 : _t$error.message);
|
|
354
|
-
}).join('\n'), "\n\nPending Messages:\n").concat(pending.map(function (t) {
|
|
355
|
-
return " - ".concat(t.name, " (").concat(t.id, ")");
|
|
356
|
-
}).join('\n'), "\n ").trim();
|
|
357
|
-
}
|
|
358
|
-
}]);
|
|
359
|
-
return MessageTracer;
|
|
360
|
-
}(); // 单例实例
|
|
361
|
-
export var messageTracer = new MessageTracer();
|
|
362
|
-
|
|
363
|
-
// 开发环境自动启用
|
|
364
|
-
console.log("🚀 ~ window:", window);
|
|
365
|
-
if (typeof window !== 'undefined') {
|
|
366
|
-
// @ts-ignore
|
|
367
|
-
window.__MESSAGE_TRACER__ = messageTracer;
|
|
368
|
-
}
|
|
369
|
-
//# sourceMappingURL=messageTracer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["LogLevel","MessageTracer","_classCallCheck","_defineProperty","Map","enabled","logLevel","INFO","maxTraces","captureStack","logToConsole","persistToStorage","_createClass","key","value","configure","config","_objectSpread","startTrace","id","name","params","console","log","trace","sanitizeParams","timestamp","Date","now","stack","parentId","currentMessageId","undefined","status","traces","set","messageChain","push","size","firstKey","keys","next","delete","DEBUG","concat","chain","getMessageChain","endTrace","result","get","duration","pop","persistTrace","errorTrace","error","message","String","errorContext","buildErrorContext","ERROR","context","map","t","callStack","visited","Set","currentId","maxDepth","length","has","warn","add","unshift","Error","split","slice","join","JSON","parse","stringify","toLowerCase","includes","substring","_unused","level","data","toISOString","prefix","debug","info","WARN","localStorage","setItem","getAllTraces","Array","from","values","getTrace","getFailedTraces","filter","getPendingTraces","clear","_export","generateReport","failed","pending","avgDuration","reduce","sum","toFixed","_t$error","trim","messageTracer","window","__MESSAGE_TRACER__"],"sources":["../../src/utils/messageTracer.ts"],"sourcesContent":["/**\n * 消息追踪系统\n * 用于调试消息驱动架构中的消息流转和错误定位\n */\n\nexport enum LogLevel {\n DEBUG = 0,\n INFO = 1,\n WARN = 2,\n ERROR = 3,\n NONE = 4,\n}\n\nexport interface MessageTrace {\n id: string\n name: string\n params: any\n timestamp: number\n stack: string\n parentId?: string\n status: 'pending' | 'success' | 'error'\n duration?: number\n error?: any\n result?: any\n}\n\nexport interface TracerConfig {\n enabled: boolean\n logLevel: LogLevel\n maxTraces: number\n captureStack: boolean\n logToConsole: boolean\n persistToStorage: boolean\n}\n\nclass MessageTracer {\n private traces: Map<string, MessageTrace> = new Map()\n private config: TracerConfig = {\n enabled: true,\n logLevel: LogLevel.INFO,\n maxTraces: 1000,\n captureStack: true,\n logToConsole: true,\n persistToStorage: false,\n }\n\n private currentMessageId: string | null = null\n private messageChain: string[] = []\n\n configure(config: Partial<TracerConfig>) {\n this.config = { ...this.config, ...config }\n }\n\n /**\n * 开始追踪一个消息\n */\n startTrace(id: string, name: string, params: any): void {\n console.log(\"🚀 ~ MessageTracer ~ startTrace ~ id:\", id)\n if (!this.config.enabled)\n return\n\n const trace: MessageTrace = {\n id,\n name,\n params: this.sanitizeParams(params),\n timestamp: Date.now(),\n stack: this.config.captureStack ? this.captureStack() : '',\n parentId: this.currentMessageId || undefined,\n status: 'pending',\n }\n\n this.traces.set(id, trace)\n\n // 维护消息链\n if (this.currentMessageId) {\n this.messageChain.push(this.currentMessageId)\n }\n this.currentMessageId = id\n\n // 限制追踪数量\n if (this.traces.size > this.config.maxTraces) {\n const firstKey = this.traces.keys().next().value\n this.traces.delete(firstKey)\n }\n\n this.log(LogLevel.DEBUG, `📨 Message started: ${name}`, {\n id,\n params: trace.params,\n chain: this.getMessageChain(id),\n })\n }\n\n /**\n * 标记消息成功完成\n */\n endTrace(id: string, result?: any): void {\n if (!this.config.enabled)\n return\n\n const trace = this.traces.get(id)\n if (!trace)\n return\n\n trace.status = 'success'\n trace.duration = Date.now() - trace.timestamp\n trace.result = this.sanitizeParams(result)\n\n this.log(LogLevel.INFO, `✅ Message completed: ${trace.name}`, {\n id,\n duration: `${trace.duration}ms`,\n result: trace.result,\n })\n\n // 恢复消息链\n if (this.currentMessageId === id) {\n this.currentMessageId = this.messageChain.pop() || null\n }\n\n // 持久化\n if (this.config.persistToStorage) {\n this.persistTrace(trace)\n }\n }\n\n /**\n * 标记消息执行失败\n */\n errorTrace(id: string, error: any): void {\n if (!this.config.enabled)\n return\n\n const trace = this.traces.get(id)\n if (!trace)\n return\n\n trace.status = 'error'\n trace.duration = Date.now() - trace.timestamp\n trace.error = {\n message: error?.message || String(error),\n stack: error?.stack,\n name: error?.name,\n }\n\n // 构建完整的错误上下文\n const errorContext = this.buildErrorContext(trace)\n\n this.log(LogLevel.ERROR, `❌ Message failed: ${trace.name}`, errorContext)\n\n // 恢复消息链\n if (this.currentMessageId === id) {\n this.currentMessageId = this.messageChain.pop() || null\n }\n\n // 持久化错误\n if (this.config.persistToStorage) {\n this.persistTrace(trace)\n }\n }\n\n /**\n * 构建错误上下文,包含完整的消息链信息\n */\n private buildErrorContext(trace: MessageTrace) {\n const chain = this.getMessageChain(trace.id)\n const context = {\n id: trace.id,\n name: trace.name,\n params: trace.params,\n duration: `${trace.duration}ms`,\n error: trace.error,\n messageChain: chain.map(t => ({\n name: t.name,\n id: t.id,\n duration: t.duration ? `${t.duration}ms` : 'pending',\n })),\n callStack: trace.stack,\n }\n\n return context\n }\n\n /**\n * 获取消息调用链\n * 添加了循环引用检测和深度限制,防止无限递归\n */\n private getMessageChain(id: string): MessageTrace[] {\n const chain: MessageTrace[] = []\n const visited = new Set<string>()\n let currentId: string | undefined = id\n const maxDepth = 100 // 防止无限循环和过深的调用链\n\n while (currentId && chain.length < maxDepth) {\n // 检测循环引用\n if (visited.has(currentId)) {\n console.warn(`[MessageTracer] Circular reference detected in message chain: ${currentId}`)\n break\n }\n visited.add(currentId)\n\n const trace = this.traces.get(currentId)\n if (!trace)\n break\n chain.unshift(trace)\n currentId = trace.parentId\n }\n\n // 如果达到最大深度,发出警告\n if (chain.length >= maxDepth) {\n console.warn(`[MessageTracer] Message chain exceeded max depth (${maxDepth}). Chain may be incomplete.`)\n }\n\n return chain\n }\n\n /**\n * 捕获调用栈\n */\n private captureStack(): string {\n const stack = new Error().stack || ''\n // 移除 tracer 自身的栈帧\n return stack.split('\\n').slice(3).join('\\n')\n }\n\n /**\n * 清理敏感参数\n */\n private sanitizeParams(params: any): any {\n if (!params)\n return params\n\n // 避免循环引用和大对象\n try {\n return JSON.parse(JSON.stringify(params, (key, value) => {\n // 过滤掉可能的敏感信息\n if (key.toLowerCase().includes('password') || key.toLowerCase().includes('token'))\n return '[REDACTED]'\n\n // 限制字符串长度\n if (typeof value === 'string' && value.length > 500)\n return `${value.substring(0, 500)}... (truncated)`\n\n return value\n }))\n }\n catch {\n return '[Unable to serialize]'\n }\n }\n\n /**\n * 分级日志输出\n */\n private log(level: LogLevel, message: string, data?: any): void {\n if (!this.config.logToConsole || level < this.config.logLevel)\n return\n\n const timestamp = new Date().toISOString()\n const prefix = `[${timestamp}]`\n\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(prefix, message, data)\n break\n case LogLevel.INFO:\n console.info(prefix, message, data)\n break\n case LogLevel.WARN:\n console.warn(prefix, message, data)\n break\n case LogLevel.ERROR:\n console.error(prefix, message, data)\n break\n }\n }\n\n /**\n * 持久化追踪记录\n */\n private persistTrace(trace: MessageTrace): void {\n try {\n const key = `message_trace_${trace.id}`\n const data = JSON.stringify(trace)\n localStorage.setItem(key, data)\n }\n catch (error) {\n console.warn('Failed to persist trace:', error)\n }\n }\n\n /**\n * 获取所有追踪记录\n */\n getAllTraces(): MessageTrace[] {\n return Array.from(this.traces.values())\n }\n\n /**\n * 获取特定消息的追踪记录\n */\n getTrace(id: string): MessageTrace | undefined {\n return this.traces.get(id)\n }\n\n /**\n * 获取失败的消息\n */\n getFailedTraces(): MessageTrace[] {\n return this.getAllTraces().filter(t => t.status === 'error')\n }\n\n /**\n * 获取待处理的消息\n */\n getPendingTraces(): MessageTrace[] {\n return this.getAllTraces().filter(t => t.status === 'pending')\n }\n\n /**\n * 清空追踪记录\n */\n clear(): void {\n this.traces.clear()\n this.currentMessageId = null\n this.messageChain = []\n }\n\n /**\n * 导出追踪数据(用于调试)\n */\n export(): string {\n return JSON.stringify({\n traces: this.getAllTraces(),\n config: this.config,\n timestamp: Date.now(),\n }, null, 2)\n }\n\n /**\n * 生成调试报告\n */\n generateReport(): string {\n const traces = this.getAllTraces()\n const failed = this.getFailedTraces()\n const pending = this.getPendingTraces()\n\n const avgDuration = traces\n .filter(t => t.duration)\n .reduce((sum, t) => sum + (t.duration || 0), 0) / traces.length\n\n return `\n=== Message Tracer Report ===\nTotal Messages: ${traces.length}\nFailed: ${failed.length}\nPending: ${pending.length}\nAverage Duration: ${avgDuration.toFixed(2)}ms\n\nFailed Messages:\n${failed.map(t => ` - ${t.name} (${t.id}): ${t.error?.message}`).join('\\n')}\n\nPending Messages:\n${pending.map(t => ` - ${t.name} (${t.id})`).join('\\n')}\n `.trim()\n }\n}\n\n// 单例实例\nexport const messageTracer = new MessageTracer()\n\n// 开发环境自动启用\nconsole.log(\"🚀 ~ window:\", window)\nif (typeof window !== 'undefined') {\n // @ts-ignore\n window.__MESSAGE_TRACER__ = messageTracer\n}\n"],"mappings":"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"}
|