@antglobal/rlog-sdk 0.0.1755855517-dev.12 → 0.0.1755855517-dev.14
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/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +11 -18
- package/dist/esm/lib/config.d.ts.map +1 -1
- package/dist/esm/lib/config.js +7 -5
- package/dist/esm/lib/init.d.ts.map +1 -1
- package/dist/esm/lib/init.js +4 -5
- package/dist/esm/lib/logger.d.ts +1 -1
- package/dist/esm/lib/logger.d.ts.map +1 -1
- package/dist/esm/lib/logger.js +16 -106
- package/dist/esm/lib/net.d.ts +1 -0
- package/dist/esm/lib/net.d.ts.map +1 -1
- package/dist/esm/lib/net.js +2 -2
- package/dist/esm/lib/upload-worker-manager.d.ts +7 -1
- package/dist/esm/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker-manager.js +62 -11
- package/dist/esm/lib/upload-worker.d.ts +0 -1
- package/dist/esm/lib/upload-worker.d.ts.map +1 -1
- package/dist/esm/lib/upload-worker.js +1 -1
- package/dist/esm/lib/uploader.d.ts.map +1 -1
- package/dist/esm/lib/uploader.js +15 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +11 -18
- package/dist/lib/lib/config.d.ts.map +1 -1
- package/dist/lib/lib/config.js +6 -4
- package/dist/lib/lib/init.d.ts.map +1 -1
- package/dist/lib/lib/init.js +3 -4
- package/dist/lib/lib/logger.d.ts +1 -1
- package/dist/lib/lib/logger.d.ts.map +1 -1
- package/dist/lib/lib/logger.js +16 -106
- package/dist/lib/lib/net.d.ts +1 -0
- package/dist/lib/lib/net.d.ts.map +1 -1
- package/dist/lib/lib/net.js +2 -1
- package/dist/lib/lib/upload-worker-manager.d.ts +7 -1
- package/dist/lib/lib/upload-worker-manager.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker-manager.js +63 -11
- package/dist/lib/lib/upload-worker.d.ts +0 -1
- package/dist/lib/lib/upload-worker.d.ts.map +1 -1
- package/dist/lib/lib/upload-worker.js +1 -1
- package/dist/lib/lib/uploader.d.ts.map +1 -1
- package/dist/lib/lib/uploader.js +14 -0
- package/dist/rlog-sdk.min.js +1 -1
- package/package.json +1 -1
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAGnE,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,iBAAS,IAAI,CAAC,KAAK,EAAE,MAAM;uBAIL;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;EAI5C;AAED,iBAAS,YAAY,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,QAK1D;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAEpD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,iBAAS,iBAAiB,IAAI,OAAO,CAKpC;AAED,iBAAS,qBAAqB,IAAI,OAAO,CAIxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAGnE,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,iBAAS,IAAI,CAAC,KAAK,EAAE,MAAM;uBAIL;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;EAI5C;AAED,iBAAS,YAAY,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,QAK1D;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAEpD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,iBAAS,iBAAiB,IAAI,OAAO,CAKpC;AAED,iBAAS,qBAAqB,IAAI,OAAO,CAIxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAyBhD;AAED,QAAA,MAAM,KAAK;6BACgB,MAAM;;;;;;;;;;CAehC,CAAC;AAGF,OAAO,EAEL,IAAI,EACJ,YAAY,EAEZ,cAAc,EAEd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAErB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAEjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,mBAAmB,EAEnB,KAAK,GACN,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -44,16 +44,6 @@ function toggleConsumeOnlyMode() {
|
|
|
44
44
|
return newMode;
|
|
45
45
|
}
|
|
46
46
|
function reportError(error) {
|
|
47
|
-
var config = getConfig();
|
|
48
|
-
if (config.captureMode !== 'error') {
|
|
49
|
-
logger.warn('reportError() is only available in error capture mode (captureMode: "error")');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
var trigger = getErrorTrigger();
|
|
53
|
-
if (!trigger) {
|
|
54
|
-
logger.warn('reportError() called but error trigger is not initialized');
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
47
|
var message = typeof error === 'string' ? error : error.message;
|
|
58
48
|
var stack = _typeof(error) === 'object' && error.stack ? error.stack : undefined;
|
|
59
49
|
try {
|
|
@@ -67,14 +57,17 @@ function reportError(error) {
|
|
|
67
57
|
} catch (e) {
|
|
68
58
|
logger.warn('Failed to add custom error event:', e);
|
|
69
59
|
}
|
|
70
|
-
trigger
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
60
|
+
var trigger = getErrorTrigger();
|
|
61
|
+
if (trigger) {
|
|
62
|
+
trigger.onError({
|
|
63
|
+
type: 'custom',
|
|
64
|
+
message: message,
|
|
65
|
+
timestamp: Date.now(),
|
|
66
|
+
detail: {
|
|
67
|
+
stack: stack
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
78
71
|
}
|
|
79
72
|
var debug = {
|
|
80
73
|
getStorageAdapterType: function getStorageAdapterType() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,CACJ,QAAQ,GACR,OAAO,GACP,OAAO,GACP,YAAY,GACZ,OAAO,GACP,KAAK,GACL,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CACT,EAAE,CAAC;IAEJ,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gBAAgB,CAAC,EAAE;QAEjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAGD,MAAM,WAAW,kBAAkB;IAEjC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,OAAO,CAAC;IAEhB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE;QAET,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACxB,CAAC;IAGF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAGnC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAG9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAGF,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAG/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AA+CD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuC3E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,mBAAmB;IAElC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE,CACJ,QAAQ,GACR,OAAO,GACP,OAAO,GACP,YAAY,GACZ,OAAO,GACP,KAAK,GACL,QAAQ,GACR,OAAO,GACP,OAAO,GACP,gBAAgB,GAChB,UAAU,GACV,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,SAAS,GACT,SAAS,GACT,OAAO,GACP,MAAM,CACT,EAAE,CAAC;IAEJ,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,gBAAgB,CAAC,EAAE;QAEjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAE3B,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAGD,MAAM,WAAW,kBAAkB;IAEjC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,SAAS;IAExB,MAAM,EAAE,OAAO,CAAC;IAEhB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,EAAE;QAET,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAE7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAEhB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;KACxB,CAAC;IAGF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG5B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IAGnC,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAG9B,IAAI,CAAC,EAAE,OAAO,CAAC;IAGf,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,CAAC;QAEjB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,iBAAiB,CAAC,EAAE,OAAO,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IAGF,UAAU,CAAC,EAAE,OAAO,CAAC;IAGrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAGhB,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAG/B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AA+CD;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAuC3E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAEhE;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtE"}
|
package/dist/esm/lib/config.js
CHANGED
|
@@ -10,7 +10,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
10
10
|
import { get } from "./request";
|
|
11
11
|
import { deepMergeConfig } from "./utils";
|
|
12
12
|
import logger from "./logger";
|
|
13
|
-
import { getCustomHeaders } from "./net";
|
|
13
|
+
import { getCustomHeaders, setBlackListUrls } from "./net";
|
|
14
14
|
|
|
15
15
|
// Console录制插件配置类型定义
|
|
16
16
|
|
|
@@ -171,12 +171,14 @@ function _initConfigManager() {
|
|
|
171
171
|
while (1) switch (_context3.prev = _context3.next) {
|
|
172
172
|
case 0:
|
|
173
173
|
if (!cdnUrl) {
|
|
174
|
-
_context3.next =
|
|
174
|
+
_context3.next = 8;
|
|
175
175
|
break;
|
|
176
176
|
}
|
|
177
|
-
|
|
177
|
+
// 将 CDN 配置 URL 加入黑名单,避免被网络监控 hook 拦截导致请求头重复设置
|
|
178
|
+
setBlackListUrls([cdnUrl]);
|
|
179
|
+
_context3.next = 4;
|
|
178
180
|
return fetchConfigFromCdn(cdnUrl);
|
|
179
|
-
case
|
|
181
|
+
case 4:
|
|
180
182
|
config = _context3.sent;
|
|
181
183
|
updateConfig(config);
|
|
182
184
|
|
|
@@ -207,7 +209,7 @@ function _initConfigManager() {
|
|
|
207
209
|
}, _callee2, null, [[0, 7]]);
|
|
208
210
|
})), updateInterval);
|
|
209
211
|
}
|
|
210
|
-
case
|
|
212
|
+
case 8:
|
|
211
213
|
case "end":
|
|
212
214
|
return _context3.stop();
|
|
213
215
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/init.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACrC,OAAO,GAAE,MAAuB,GAC/B,IAAI,CAiDN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/lib/init.ts"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,EACrC,OAAO,GAAE,MAAuB,GAC/B,IAAI,CAiDN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAgEN"}
|
package/dist/esm/lib/init.js
CHANGED
|
@@ -3,7 +3,7 @@ import { initConfigManager, getConfig } from "./config";
|
|
|
3
3
|
import { startUploadLoop, resetUploadLoop, cancelUploadLoop } from "./uploader";
|
|
4
4
|
import { initRouterMonitor, stopRouterMonitor } from "./router-monitor";
|
|
5
5
|
import { initErrorHandler, cleanupErrorHandler, setErrorTrigger } from "./error";
|
|
6
|
-
import { setSdkLogEndpoint, restoreXhr, setNetErrorTrigger } from "./net";
|
|
6
|
+
import { setSdkLogEndpoint, restoreXhr, setNetErrorTrigger, normalizeUrl } from "./net";
|
|
7
7
|
import { storage } from "./storage-manager";
|
|
8
8
|
import { getDeviceId } from "./utils";
|
|
9
9
|
import { ErrorTrigger } from "./error-trigger";
|
|
@@ -91,9 +91,8 @@ export function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
91
91
|
resetUploadLoop();
|
|
92
92
|
|
|
93
93
|
// 设置SDK日志上报接口地址,并自动加入黑名单避免循环上报
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
94
|
+
var normalizedServUrl = normalizeUrl(serv);
|
|
95
|
+
setSdkLogEndpoint(normalizedServUrl);
|
|
97
96
|
|
|
98
97
|
// 初始化配置管理器
|
|
99
98
|
initConfigManager(cdnConfigUrl).then(function () {
|
|
@@ -129,7 +128,7 @@ export function initRLog(serv, appId, cdnConfigUrl) {
|
|
|
129
128
|
// 启动统一上传循环
|
|
130
129
|
// 错误模式下:idle 时跳过上传,uploading 时上传,状态由 ErrorTrigger 控制
|
|
131
130
|
// 全量模式下:持续轮询上传
|
|
132
|
-
startUploadLoop(
|
|
131
|
+
startUploadLoop(normalizedServUrl, appId);
|
|
133
132
|
|
|
134
133
|
// 初始化路由监控
|
|
135
134
|
initRouterMonitor(config.routerMonitor);
|
package/dist/esm/lib/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/lib/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+BH;;GAEG;AACH,QAAA,MAAM,MAAM;IACV;;OAEG;iBACU,GAAG,EAAE,GAAG,IAAI;IAIzB;;OAEG;kBACW,GAAG,EAAE,GAAG,IAAI;IAI1B;;OAEG;kBACW,GAAG,EAAE,GAAG,IAAI;IAI1B;;OAEG;mBACY,GAAG,EAAE,GAAG,IAAI;CAG5B,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/esm/lib/logger.js
CHANGED
|
@@ -1,126 +1,36 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Rlog SDK 日志工具
|
|
3
|
-
*
|
|
3
|
+
* 统一管理所有日志输出,添加统一前缀 [Rlog]
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
/**
|
|
7
|
-
* ANSI 颜色代码
|
|
8
|
-
*/
|
|
9
|
-
var Colors = {
|
|
10
|
-
reset: '\x1b[0m',
|
|
11
|
-
bright: '\x1b[1m',
|
|
12
|
-
dim: '\x1b[2m',
|
|
13
|
-
// 前景色
|
|
14
|
-
cyan: '\x1b[36m',
|
|
15
|
-
green: '\x1b[32m',
|
|
16
|
-
yellow: '\x1b[33m',
|
|
17
|
-
red: '\x1b[31m',
|
|
18
|
-
blue: '\x1b[34m',
|
|
19
|
-
magenta: '\x1b[35m',
|
|
20
|
-
// 背景色
|
|
21
|
-
bgCyan: '\x1b[46m',
|
|
22
|
-
bgGreen: '\x1b[42m',
|
|
23
|
-
bgYellow: '\x1b[43m',
|
|
24
|
-
bgRed: '\x1b[41m',
|
|
25
|
-
bgBlue: '\x1b[44m'
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 日志级别配置
|
|
30
|
-
*/
|
|
31
|
-
var LogLevelConfig = {
|
|
32
|
-
log: {
|
|
33
|
-
prefix: '📝 LOG',
|
|
34
|
-
color: Colors.cyan,
|
|
35
|
-
style: 'color: #00bcd4; font-weight: bold;'
|
|
36
|
-
},
|
|
37
|
-
info: {
|
|
38
|
-
prefix: 'ℹ️ INFO',
|
|
39
|
-
color: Colors.blue,
|
|
40
|
-
style: 'color: #2196f3; font-weight: bold;'
|
|
41
|
-
},
|
|
42
|
-
warn: {
|
|
43
|
-
prefix: '⚠️ WARN',
|
|
44
|
-
color: Colors.yellow,
|
|
45
|
-
style: 'color: #ff9800; font-weight: bold;'
|
|
46
|
-
},
|
|
47
|
-
error: {
|
|
48
|
-
prefix: '❌ ERROR',
|
|
49
|
-
color: Colors.red,
|
|
50
|
-
style: 'color: #f44336; font-weight: bold;'
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
|
|
54
6
|
/**
|
|
55
7
|
* 日志级别
|
|
56
8
|
*/
|
|
57
9
|
|
|
58
|
-
/**
|
|
59
|
-
* 检测是否支持颜色输出
|
|
60
|
-
*/
|
|
61
|
-
function supportsColor() {
|
|
62
|
-
// 浏览器环境始终支持颜色
|
|
63
|
-
if (typeof window !== 'undefined') {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// Node.js 环境检测
|
|
68
|
-
if (typeof process !== 'undefined' && process.stdout) {
|
|
69
|
-
return process.stdout.isTTY === true;
|
|
70
|
-
}
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
10
|
/**
|
|
75
11
|
* 统一的日志输出函数
|
|
76
12
|
* @param level 日志级别
|
|
77
13
|
* @param args 日志参数
|
|
78
14
|
*/
|
|
79
15
|
function _log(level) {
|
|
80
|
-
var _console, _console2, _console3, _console4
|
|
81
|
-
var
|
|
82
|
-
var useColor = supportsColor();
|
|
83
|
-
|
|
84
|
-
// 构建前缀
|
|
85
|
-
var prefix = useColor ? "".concat(config.color).concat(Colors.bright, "[Rlog]").concat(Colors.reset, " ").concat(config.prefix).concat(Colors.reset) : "[Rlog] ".concat(config.prefix);
|
|
86
|
-
|
|
87
|
-
// 浏览器环境使用 console 的 %c 格式化
|
|
16
|
+
var _console, _console2, _console3, _console4;
|
|
17
|
+
var prefix = '[Rlog]';
|
|
88
18
|
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
89
19
|
args[_key - 1] = arguments[_key];
|
|
90
20
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
case 'error':
|
|
105
|
-
(_console4 = console).error.apply(_console4, [browserPrefix].concat(styles, args));
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
} else {
|
|
109
|
-
// Node.js 环境使用 ANSI 颜色
|
|
110
|
-
switch (level) {
|
|
111
|
-
case 'log':
|
|
112
|
-
(_console5 = console).log.apply(_console5, [prefix].concat(args));
|
|
113
|
-
break;
|
|
114
|
-
case 'info':
|
|
115
|
-
(_console6 = console).info.apply(_console6, [prefix].concat(args));
|
|
116
|
-
break;
|
|
117
|
-
case 'warn':
|
|
118
|
-
(_console7 = console).warn.apply(_console7, [prefix].concat(args));
|
|
119
|
-
break;
|
|
120
|
-
case 'error':
|
|
121
|
-
(_console8 = console).error.apply(_console8, [prefix].concat(args));
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
21
|
+
switch (level) {
|
|
22
|
+
case 'log':
|
|
23
|
+
(_console = console).log.apply(_console, [prefix].concat(args));
|
|
24
|
+
break;
|
|
25
|
+
case 'info':
|
|
26
|
+
(_console2 = console).info.apply(_console2, [prefix].concat(args));
|
|
27
|
+
break;
|
|
28
|
+
case 'warn':
|
|
29
|
+
(_console3 = console).warn.apply(_console3, [prefix].concat(args));
|
|
30
|
+
break;
|
|
31
|
+
case 'error':
|
|
32
|
+
(_console4 = console).error.apply(_console4, [prefix].concat(args));
|
|
33
|
+
break;
|
|
124
34
|
}
|
|
125
35
|
}
|
|
126
36
|
|
package/dist/esm/lib/net.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { ErrorTrigger } from './error-trigger';
|
|
|
4
4
|
* 设置网络模块的错误触发器实例
|
|
5
5
|
*/
|
|
6
6
|
export declare function setNetErrorTrigger(trigger: ErrorTrigger | null): void;
|
|
7
|
+
export declare function normalizeUrl(url: string): string;
|
|
7
8
|
export declare function shouldRecordUrl(url: string): boolean;
|
|
8
9
|
export declare function watchXhr(r: typeof record): void;
|
|
9
10
|
export declare function restoreXhr(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../src/lib/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;
|
|
1
|
+
{"version":3,"file":"net.d.ts","sourceRoot":"","sources":["../../../src/lib/net.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAErE;AAgDD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmBhD;AAwED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBpD;AAiCD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,MAAM,QAsPxC;AAGD,wBAAgB,UAAU,IAAI,IAAI,CAiBjC;AAGD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAQrD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAOrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAoBxD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAEtE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzD"}
|
package/dist/esm/lib/net.js
CHANGED
|
@@ -48,7 +48,7 @@ var sdkLogEndpoint = null;
|
|
|
48
48
|
var HEADERS_TO_EXTRACT = ['sky_trace_id', 'antbank-traceid'];
|
|
49
49
|
|
|
50
50
|
// 辅助函数:规范化URL路径
|
|
51
|
-
function normalizeUrl(url) {
|
|
51
|
+
export function normalizeUrl(url) {
|
|
52
52
|
try {
|
|
53
53
|
// 如果是完整URL,直接返回
|
|
54
54
|
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
@@ -479,7 +479,7 @@ export function setSdkLogEndpoint(endpoint) {
|
|
|
479
479
|
sdkLogEndpoint = endpoint;
|
|
480
480
|
|
|
481
481
|
// 规范化endpoint路径,确保相对路径也能正确匹配
|
|
482
|
-
var normalizedEndpoint = endpoint
|
|
482
|
+
var normalizedEndpoint = normalizeUrl(endpoint);
|
|
483
483
|
|
|
484
484
|
// 自动将SDK日志上报接口加入黑名单,避免循环上报
|
|
485
485
|
// 同时添加原始路径和规范化路径,确保兼容性
|
|
@@ -9,6 +9,11 @@
|
|
|
9
9
|
* - 提供与现有 uploader.ts 相同的对外 API
|
|
10
10
|
*/
|
|
11
11
|
import type { WorkerConfig } from './upload-worker';
|
|
12
|
+
/**
|
|
13
|
+
* 设置 Worker 降级回调
|
|
14
|
+
* @param callback 降级回调函数
|
|
15
|
+
*/
|
|
16
|
+
export declare function setWorkerFallbackCallback(callback: (() => void) | null): void;
|
|
12
17
|
/**
|
|
13
18
|
* 尝试初始化 Worker 模式
|
|
14
19
|
* @returns 是否成功启用 Worker 模式
|
|
@@ -16,8 +21,9 @@ import type { WorkerConfig } from './upload-worker';
|
|
|
16
21
|
export declare function initWorkerUpload(serv: string, appId: string): boolean;
|
|
17
22
|
/**
|
|
18
23
|
* 销毁 Worker
|
|
24
|
+
* @param triggerFallback 是否触发降级回调
|
|
19
25
|
*/
|
|
20
|
-
export declare function destroyWorker(): void;
|
|
26
|
+
export declare function destroyWorker(triggerFallback?: boolean): void;
|
|
21
27
|
/**
|
|
22
28
|
* 是否正在使用 Worker 模式
|
|
23
29
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-worker-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload-worker-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AAqUlF;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAE7E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CA0CrE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,eAAe,UAAQ,GAAG,IAAI,CA6B3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAQpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAErE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAKtE"}
|
|
@@ -46,6 +46,12 @@ var isFetchingBatch = false;
|
|
|
46
46
|
// batchId 计数器
|
|
47
47
|
var batchIdCounter = 0;
|
|
48
48
|
|
|
49
|
+
// Worker 就绪超时检测
|
|
50
|
+
var workerReadyTimeout = null;
|
|
51
|
+
|
|
52
|
+
// Worker 降级回调(当 Worker 模式失败时调用)
|
|
53
|
+
var onWorkerFallback = null;
|
|
54
|
+
|
|
49
55
|
/**
|
|
50
56
|
* 生成唯一的 batchId
|
|
51
57
|
*/
|
|
@@ -83,14 +89,23 @@ function createInlineWorker() {
|
|
|
83
89
|
*/
|
|
84
90
|
function handleWorkerMessage(e) {
|
|
85
91
|
var msg = e.data;
|
|
86
|
-
if (!msg || !msg.type)
|
|
92
|
+
if (!msg || !msg.type) {
|
|
93
|
+
logger.warn('Received invalid Worker message:', msg);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
logger.log('Received Worker message:', msg.type);
|
|
87
97
|
switch (msg.type) {
|
|
88
98
|
case 'READY':
|
|
89
99
|
workerReady = true;
|
|
90
|
-
|
|
100
|
+
// 清除超时检测
|
|
101
|
+
if (workerReadyTimeout) {
|
|
102
|
+
clearTimeout(workerReadyTimeout);
|
|
103
|
+
workerReadyTimeout = null;
|
|
104
|
+
}
|
|
105
|
+
logger.log('Upload Worker is ready, workerReady state:', workerReady, 'isWorkerMode:', isWorkerMode);
|
|
91
106
|
break;
|
|
92
107
|
case 'REQUEST_BATCH':
|
|
93
|
-
handleRequestBatch(
|
|
108
|
+
handleRequestBatch();
|
|
94
109
|
break;
|
|
95
110
|
case 'UPLOAD_SUCCESS':
|
|
96
111
|
handleUploadSuccess(msg.batchId);
|
|
@@ -108,11 +123,11 @@ function handleWorkerMessage(e) {
|
|
|
108
123
|
* 处理 Worker 请求数据批次
|
|
109
124
|
* Worker 内部定时器触发,主线程从 storage 读取数据后发给 Worker
|
|
110
125
|
*/
|
|
111
|
-
function handleRequestBatch(
|
|
126
|
+
function handleRequestBatch() {
|
|
112
127
|
return _handleRequestBatch.apply(this, arguments);
|
|
113
128
|
} // 待处理的批次元数据
|
|
114
129
|
function _handleRequestBatch() {
|
|
115
|
-
_handleRequestBatch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(
|
|
130
|
+
_handleRequestBatch = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
116
131
|
var currentConfig, isErrorMode, events, windowStart, config, consumeOnly, queryParams, customHeaders, batchId;
|
|
117
132
|
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
118
133
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -222,7 +237,7 @@ var pendingBatches = new Map();
|
|
|
222
237
|
/**
|
|
223
238
|
* 处理上传成功
|
|
224
239
|
*/
|
|
225
|
-
function handleUploadSuccess(
|
|
240
|
+
function handleUploadSuccess(_x) {
|
|
226
241
|
return _handleUploadSuccess.apply(this, arguments);
|
|
227
242
|
}
|
|
228
243
|
/**
|
|
@@ -264,7 +279,7 @@ function _handleUploadSuccess() {
|
|
|
264
279
|
}));
|
|
265
280
|
return _handleUploadSuccess.apply(this, arguments);
|
|
266
281
|
}
|
|
267
|
-
function handleUploadFailure(_x3, _x4
|
|
282
|
+
function handleUploadFailure(_x2, _x3, _x4) {
|
|
268
283
|
return _handleUploadFailure.apply(this, arguments);
|
|
269
284
|
}
|
|
270
285
|
/**
|
|
@@ -297,7 +312,7 @@ function _handleUploadFailure() {
|
|
|
297
312
|
}));
|
|
298
313
|
return _handleUploadFailure.apply(this, arguments);
|
|
299
314
|
}
|
|
300
|
-
function handleMaxRetryReached(
|
|
315
|
+
function handleMaxRetryReached(_x5, _x6) {
|
|
301
316
|
return _handleMaxRetryReached.apply(this, arguments);
|
|
302
317
|
}
|
|
303
318
|
/**
|
|
@@ -369,7 +384,10 @@ function _handleMaxRetryReached() {
|
|
|
369
384
|
}
|
|
370
385
|
function sendToWorker(command) {
|
|
371
386
|
if (worker && workerReady) {
|
|
387
|
+
logger.log('Sending command to Worker:', command.type);
|
|
372
388
|
worker.postMessage(command);
|
|
389
|
+
} else {
|
|
390
|
+
logger.warn('Cannot send to Worker - worker:', !!worker, 'workerReady:', workerReady, 'command:', command.type);
|
|
373
391
|
}
|
|
374
392
|
}
|
|
375
393
|
|
|
@@ -378,12 +396,20 @@ function sendToWorker(command) {
|
|
|
378
396
|
*/
|
|
379
397
|
function handleWorkerError(e) {
|
|
380
398
|
logger.error('Upload Worker error:', e.message);
|
|
381
|
-
// Worker
|
|
382
|
-
destroyWorker();
|
|
399
|
+
// Worker 出错时销毁,降级到主线程
|
|
400
|
+
destroyWorker(true);
|
|
383
401
|
}
|
|
384
402
|
|
|
385
403
|
// ==================== 对外 API ====================
|
|
386
404
|
|
|
405
|
+
/**
|
|
406
|
+
* 设置 Worker 降级回调
|
|
407
|
+
* @param callback 降级回调函数
|
|
408
|
+
*/
|
|
409
|
+
export function setWorkerFallbackCallback(callback) {
|
|
410
|
+
onWorkerFallback = callback;
|
|
411
|
+
}
|
|
412
|
+
|
|
387
413
|
/**
|
|
388
414
|
* 尝试初始化 Worker 模式
|
|
389
415
|
* @returns 是否成功启用 Worker 模式
|
|
@@ -411,19 +437,39 @@ export function initWorkerUpload(serv, appId) {
|
|
|
411
437
|
uploadInterval: config.uploadInterval,
|
|
412
438
|
maxRetryCount: config.maxRetryCount || 3
|
|
413
439
|
};
|
|
440
|
+
|
|
441
|
+
// 注意:这里先将 isWorkerMode 设为 true
|
|
442
|
+
// 但 workerReady 仍为 false,需要等待 Worker 发送 READY 消息
|
|
443
|
+
// sendToWorker 会检查 workerReady 状态
|
|
414
444
|
worker.postMessage({
|
|
415
445
|
type: 'START',
|
|
416
446
|
config: startConfig
|
|
417
447
|
});
|
|
418
448
|
isWorkerMode = true;
|
|
419
|
-
|
|
449
|
+
|
|
450
|
+
// 设置超时检测:如果 5 秒内没有收到 READY 消息,降级到主线程模式
|
|
451
|
+
workerReadyTimeout = setTimeout(function () {
|
|
452
|
+
if (!workerReady) {
|
|
453
|
+
logger.warn('Worker failed to send READY within 5 seconds, falling back to main thread');
|
|
454
|
+
// 销毁并触发降级回调
|
|
455
|
+
destroyWorker(true);
|
|
456
|
+
}
|
|
457
|
+
}, 5000);
|
|
458
|
+
logger.log('Upload Worker mode initialized, waiting for READY...');
|
|
420
459
|
return true;
|
|
421
460
|
}
|
|
422
461
|
|
|
423
462
|
/**
|
|
424
463
|
* 销毁 Worker
|
|
464
|
+
* @param triggerFallback 是否触发降级回调
|
|
425
465
|
*/
|
|
426
466
|
export function destroyWorker() {
|
|
467
|
+
var triggerFallback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
468
|
+
// 清理超时检测
|
|
469
|
+
if (workerReadyTimeout) {
|
|
470
|
+
clearTimeout(workerReadyTimeout);
|
|
471
|
+
workerReadyTimeout = null;
|
|
472
|
+
}
|
|
427
473
|
if (worker) {
|
|
428
474
|
try {
|
|
429
475
|
worker.postMessage({
|
|
@@ -442,6 +488,11 @@ export function destroyWorker() {
|
|
|
442
488
|
errorModeWindowStart = 0;
|
|
443
489
|
batchIdCounter = 0;
|
|
444
490
|
pendingBatches.clear();
|
|
491
|
+
|
|
492
|
+
// 触发降级回调(仅在需要时)
|
|
493
|
+
if (triggerFallback && onWorkerFallback) {
|
|
494
|
+
onWorkerFallback();
|
|
495
|
+
}
|
|
445
496
|
}
|
|
446
497
|
|
|
447
498
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAG7D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"upload-worker.d.ts","sourceRoot":"","sources":["../../../src/lib/upload-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAGD,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACpI;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,0BAA0B,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC;AAG7D,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAIlE;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAqN5C"}
|
|
@@ -22,5 +22,5 @@
|
|
|
22
22
|
* 用于通过 Blob URL 内联创建 Worker
|
|
23
23
|
*/
|
|
24
24
|
export function getUploadWorkerCode() {
|
|
25
|
-
return "\n'use strict';\n\n// ===== Worker \u5185\u90E8\u72B6\u6001 =====\nvar config = null;\nvar pollTimer = null;\nvar isRunning = false;\nvar errorModeUploading = false;\nvar failureCountMap = {};\n\n// ===== UUID \u751F\u6210 =====\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0;\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ===== \u6784\u5EFA\u4E0A\u4F20 URL =====\nfunction buildUploadUrl(serv, queryParams) {\n var params = [];\n for (var key in queryParams) {\n if (queryParams.hasOwnProperty(key) && queryParams[key] != null && queryParams[key] !== '') {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key]));\n }\n }\n var queryString = params.join('&');\n return serv + (queryString ? '?' + queryString : '');\n}\n\n// ===== \u6267\u884C\u4E0A\u4F20 =====\nfunction performUpload(msg) {\n var batchId = msg.batchId;\n var events = msg.events;\n var queryParams = msg.queryParams;\n var customHeaders = msg.customHeaders;\n\n try {\n // JSON \u5E8F\u5217\u5316\u5728 Worker \u4E2D\u6267\u884C\uFF0C\u4E0D\u963B\u585E\u4E3B\u7EBF\u7A0B\n var jsonStr = JSON.stringify(events);\n var blob = new Blob([jsonStr], { type: 'application/json' });\n var formData = new FormData();\n formData.append('file', blob, generateUUID() + '.json');\n\n var url = buildUploadUrl(config ? config.serv : '', queryParams);\n\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.timeout = 10000;\n\n // \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\n if (customHeaders) {\n for (var key in customHeaders) {\n if (customHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, customHeaders[key]);\n }\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n // \u68C0\u67E5\u4E1A\u52A1\u5C42 success \u5B57\u6BB5\n var uploadSuccess = true;\n var errorMessage = '';\n try {\n var responseData = JSON.parse(xhr.responseText);\n if (responseData && typeof responseData === 'object' && responseData.success === false) {\n uploadSuccess = false;\n errorMessage = responseData.errorMessage || 'Upload failed with success=false';\n }\n } catch(e) {\n // \u65E0\u6CD5\u89E3\u6790 JSON\uFF0C\u89C6\u4E3A\u6210\u529F\n }\n\n if (uploadSuccess) {\n // \u4E0A\u4F20\u6210\u529F\uFF0C\u91CD\u7F6E\u5931\u8D25\u8BA1\u6570\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n delete failureCountMap[batchKey];\n self.postMessage({ type: 'UPLOAD_SUCCESS', batchId: batchId });\n } else {\n handleFailure(batchId, errorMessage);\n }\n } else {\n handleFailure(batchId, 'HTTP ' + xhr.status + ': ' + xhr.statusText);\n }\n }\n };\n\n xhr.onerror = function() {\n handleFailure(batchId, 'Network error');\n };\n\n xhr.ontimeout = function() {\n handleFailure(batchId, 'Request timeout');\n };\n\n xhr.send(formData);\n } catch (e) {\n handleFailure(batchId, 'Upload exception: ' + (e.message || String(e)));\n }\n}\n\n// ===== \u5904\u7406\u4E0A\u4F20\u5931\u8D25 =====\nfunction handleFailure(batchId, errorMessage) {\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n var currentCount = failureCountMap[batchKey] || 0;\n var newCount = currentCount + 1;\n failureCountMap[batchKey] = newCount;\n\n var maxRetry = (config && config.maxRetryCount) ? config.maxRetryCount : 3;\n\n if (newCount >= maxRetry) {\n // \u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570\n delete failureCountMap[batchKey];\n self.postMessage({\n type: 'MAX_RETRY_REACHED',\n batchId: batchId,\n error: errorMessage\n });\n } else {\n self.postMessage({\n type: 'UPLOAD_FAILURE',\n batchId: batchId,\n error: errorMessage,\n failureCount: newCount\n });\n }\n}\n\n// ===== \u8F6E\u8BE2\u8C03\u5EA6 =====\nfunction startPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n }\n\n var interval = (config && config.uploadInterval) ? config.uploadInterval : 2000;\n\n pollTimer = setInterval(function() {\n if (!isRunning) return;\n\n // \u5411\u4E3B\u7EBF\u7A0B\u8BF7\u6C42\u6570\u636E\u6279\u6B21\n // \u4E3B\u7EBF\u7A0B\u4F1A\u6839\u636E\u5F53\u524D\u6A21\u5F0F\uFF08full/error\uFF09\u548C\u72B6\u6001\u51B3\u5B9A\u662F\u5426\u63D0\u4F9B\u6570\u636E\n self.postMessage({\n type: 'REQUEST_BATCH'
|
|
25
|
+
return "\n'use strict';\n\n// ===== Worker \u5185\u90E8\u72B6\u6001 =====\nvar config = null;\nvar pollTimer = null;\nvar isRunning = false;\nvar errorModeUploading = false;\nvar failureCountMap = {};\n\n// ===== UUID \u751F\u6210 =====\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n var r = (Math.random() * 16) | 0;\n var v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n// ===== \u6784\u5EFA\u4E0A\u4F20 URL =====\nfunction buildUploadUrl(serv, queryParams) {\n var params = [];\n for (var key in queryParams) {\n if (queryParams.hasOwnProperty(key) && queryParams[key] != null && queryParams[key] !== '') {\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key]));\n }\n }\n var queryString = params.join('&');\n return serv + (queryString ? '?' + queryString : '');\n}\n\n// ===== \u6267\u884C\u4E0A\u4F20 =====\nfunction performUpload(msg) {\n var batchId = msg.batchId;\n var events = msg.events;\n var queryParams = msg.queryParams;\n var customHeaders = msg.customHeaders;\n\n try {\n // JSON \u5E8F\u5217\u5316\u5728 Worker \u4E2D\u6267\u884C\uFF0C\u4E0D\u963B\u585E\u4E3B\u7EBF\u7A0B\n var jsonStr = JSON.stringify(events);\n var blob = new Blob([jsonStr], { type: 'application/json' });\n var formData = new FormData();\n formData.append('file', blob, generateUUID() + '.json');\n\n var url = buildUploadUrl(config ? config.serv : '', queryParams);\n\n var xhr = new XMLHttpRequest();\n xhr.open('POST', url, true);\n xhr.timeout = 10000;\n\n // \u8BBE\u7F6E\u81EA\u5B9A\u4E49\u8BF7\u6C42\u5934\n if (customHeaders) {\n for (var key in customHeaders) {\n if (customHeaders.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, customHeaders[key]);\n }\n }\n }\n\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300) {\n // \u68C0\u67E5\u4E1A\u52A1\u5C42 success \u5B57\u6BB5\n var uploadSuccess = true;\n var errorMessage = '';\n try {\n var responseData = JSON.parse(xhr.responseText);\n if (responseData && typeof responseData === 'object' && responseData.success === false) {\n uploadSuccess = false;\n errorMessage = responseData.errorMessage || 'Upload failed with success=false';\n }\n } catch(e) {\n // \u65E0\u6CD5\u89E3\u6790 JSON\uFF0C\u89C6\u4E3A\u6210\u529F\n }\n\n if (uploadSuccess) {\n // \u4E0A\u4F20\u6210\u529F\uFF0C\u91CD\u7F6E\u5931\u8D25\u8BA1\u6570\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n delete failureCountMap[batchKey];\n self.postMessage({ type: 'UPLOAD_SUCCESS', batchId: batchId });\n } else {\n handleFailure(batchId, errorMessage);\n }\n } else {\n handleFailure(batchId, 'HTTP ' + xhr.status + ': ' + xhr.statusText);\n }\n }\n };\n\n xhr.onerror = function() {\n handleFailure(batchId, 'Network error');\n };\n\n xhr.ontimeout = function() {\n handleFailure(batchId, 'Request timeout');\n };\n\n xhr.send(formData);\n } catch (e) {\n handleFailure(batchId, 'Upload exception: ' + (e.message || String(e)));\n }\n}\n\n// ===== \u5904\u7406\u4E0A\u4F20\u5931\u8D25 =====\nfunction handleFailure(batchId, errorMessage) {\n var batchKey = config ? (config.appId + '_' + config.deviceId) : batchId;\n var currentCount = failureCountMap[batchKey] || 0;\n var newCount = currentCount + 1;\n failureCountMap[batchKey] = newCount;\n\n var maxRetry = (config && config.maxRetryCount) ? config.maxRetryCount : 3;\n\n if (newCount >= maxRetry) {\n // \u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570\n delete failureCountMap[batchKey];\n self.postMessage({\n type: 'MAX_RETRY_REACHED',\n batchId: batchId,\n error: errorMessage\n });\n } else {\n self.postMessage({\n type: 'UPLOAD_FAILURE',\n batchId: batchId,\n error: errorMessage,\n failureCount: newCount\n });\n }\n}\n\n// ===== \u8F6E\u8BE2\u8C03\u5EA6 =====\nfunction startPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n }\n\n var interval = (config && config.uploadInterval) ? config.uploadInterval : 2000;\n\n pollTimer = setInterval(function() {\n if (!isRunning) return;\n\n // \u5411\u4E3B\u7EBF\u7A0B\u8BF7\u6C42\u6570\u636E\u6279\u6B21\n // \u4E3B\u7EBF\u7A0B\u4F1A\u6839\u636E\u5F53\u524D\u6A21\u5F0F\uFF08full/error\uFF09\u548C\u72B6\u6001\u51B3\u5B9A\u662F\u5426\u63D0\u4F9B\u6570\u636E\n self.postMessage({\n type: 'REQUEST_BATCH'\n });\n }, interval);\n}\n\nfunction stopPolling() {\n if (pollTimer) {\n clearInterval(pollTimer);\n pollTimer = null;\n }\n}\n\n// ===== \u6E05\u7406 =====\nfunction cleanup() {\n isRunning = false;\n stopPolling();\n failureCountMap = {};\n config = null;\n errorModeUploading = false;\n}\n\n// ===== \u6D88\u606F\u5904\u7406 =====\nself.onmessage = function(e) {\n var msg = e.data;\n if (!msg || !msg.type) return;\n\n switch (msg.type) {\n case 'START':\n config = msg.config;\n isRunning = true;\n failureCountMap = {};\n startPolling();\n break;\n\n case 'STOP':\n cleanup();\n break;\n\n case 'UPLOAD_BATCH':\n if (isRunning) {\n performUpload(msg);\n }\n break;\n\n case 'UPDATE_CONFIG':\n if (msg.config) {\n for (var key in msg.config) {\n if (msg.config.hasOwnProperty(key) && config) {\n config[key] = msg.config[key];\n }\n }\n // \u5982\u679C uploadInterval \u53D8\u4E86\uFF0C\u91CD\u542F\u8F6E\u8BE2\n if (msg.config.uploadInterval && isRunning) {\n startPolling();\n }\n }\n break;\n\n case 'SET_ERROR_MODE_UPLOADING':\n errorModeUploading = msg.uploading;\n break;\n }\n};\n\n// Worker \u5C31\u7EEA\u901A\u77E5\nself.postMessage({ type: 'READY' });\n";
|
|
26
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/lib/uploader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../../src/lib/uploader.ts"],"names":[],"mappings":"AAiCA;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAM/D;AAqPD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAoBjE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAcvC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAetC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
package/dist/esm/lib/uploader.js
CHANGED
|
@@ -8,7 +8,7 @@ import { getDeviceId } from "./utils";
|
|
|
8
8
|
import { getConfig } from "./config";
|
|
9
9
|
import { record } from 'rrweb';
|
|
10
10
|
import { cancelRlog } from "./init";
|
|
11
|
-
import { initWorkerUpload, destroyWorker, isUsingWorkerMode, setWorkerErrorModeUploading, setWorkerErrorModeWindowStart } from "./upload-worker-manager";
|
|
11
|
+
import { initWorkerUpload, destroyWorker, isUsingWorkerMode, setWorkerErrorModeUploading, setWorkerErrorModeWindowStart, setWorkerFallbackCallback } from "./upload-worker-manager";
|
|
12
12
|
import logger from "./logger";
|
|
13
13
|
|
|
14
14
|
// ==================== 主线程降级模式状态 ====================
|
|
@@ -369,10 +369,18 @@ function startMainThreadUploadLoop(serv, appId) {
|
|
|
369
369
|
* @param appId 应用ID
|
|
370
370
|
*/
|
|
371
371
|
export function startUploadLoop(serv, appId) {
|
|
372
|
+
// 设置 Worker 降级回调
|
|
373
|
+
setWorkerFallbackCallback(function () {
|
|
374
|
+
logger.log('Worker mode was downgraded, starting main thread upload');
|
|
375
|
+
startMainThreadUploadLoop(serv, appId);
|
|
376
|
+
});
|
|
377
|
+
|
|
372
378
|
// 优先尝试 Worker 模式
|
|
373
379
|
var workerInitialized = initWorkerUpload(serv, appId);
|
|
374
380
|
if (workerInitialized) {
|
|
375
381
|
logger.log('Upload loop started in Worker mode');
|
|
382
|
+
// Worker 模式下,超时降级逻辑在 initWorkerUpload 中处理
|
|
383
|
+
// 如果 Worker READY 超时,会自动调用 destroyWorker 并通过回调启动主线程上传
|
|
376
384
|
return;
|
|
377
385
|
}
|
|
378
386
|
|
|
@@ -386,6 +394,9 @@ export function startUploadLoop(serv, appId) {
|
|
|
386
394
|
* 同时处理 Worker 模式和主线程模式
|
|
387
395
|
*/
|
|
388
396
|
export function cancelUploadLoop() {
|
|
397
|
+
// 清理降级回调
|
|
398
|
+
setWorkerFallbackCallback(null);
|
|
399
|
+
|
|
389
400
|
// 销毁 Worker(如果存在)
|
|
390
401
|
if (isUsingWorkerMode()) {
|
|
391
402
|
destroyWorker();
|
|
@@ -402,6 +413,9 @@ export function cancelUploadLoop() {
|
|
|
402
413
|
* 重置上传循环状态(用于重新初始化)
|
|
403
414
|
*/
|
|
404
415
|
export function resetUploadLoop() {
|
|
416
|
+
// 清理降级回调
|
|
417
|
+
setWorkerFallbackCallback(null);
|
|
418
|
+
|
|
405
419
|
// 销毁 Worker(如果存在)
|
|
406
420
|
if (isUsingWorkerMode()) {
|
|
407
421
|
destroyWorker();
|
package/dist/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAGnE,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,iBAAS,IAAI,CAAC,KAAK,EAAE,MAAM;uBAIL;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;EAI5C;AAED,iBAAS,YAAY,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,QAK1D;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAEpD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,iBAAS,iBAAiB,IAAI,OAAO,CAKpC;AAED,iBAAS,qBAAqB,IAAI,OAAO,CAIxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EAChB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAGnE,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,iBAAS,IAAI,CAAC,KAAK,EAAE,MAAM;uBAIL;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE;EAI5C;AAED,iBAAS,YAAY,CAAC,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,QAK1D;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAEpD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAGjD;AAED,iBAAS,iBAAiB,IAAI,OAAO,CAKpC;AAED,iBAAS,qBAAqB,IAAI,OAAO,CAIxC;AAED,iBAAS,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAyBhD;AAED,QAAA,MAAM,KAAK;6BACgB,MAAM;;;;;;;;;;CAehC,CAAC;AAGF,OAAO,EAEL,IAAI,EACJ,YAAY,EAEZ,cAAc,EAEd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EAErB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EAEjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,mBAAmB,EAEnB,KAAK,GACN,CAAC"}
|