@sailfish-ai/recorder 1.10.2 → 1.10.4

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 (38) hide show
  1. package/dist/chunks/fiberHook-CEzmPkx_.js +125 -0
  2. package/dist/chunks/fiberHook-CEzmPkx_.js.br +0 -0
  3. package/dist/chunks/fiberHook-CEzmPkx_.js.gz +0 -0
  4. package/dist/chunks/fiberHook-DGANQ2ma.js +130 -0
  5. package/dist/chunks/fiberHook-DGANQ2ma.js.br +0 -0
  6. package/dist/chunks/fiberHook-DGANQ2ma.js.gz +0 -0
  7. package/dist/chunks/rrweb-plugin-console-record-BmAm-Ih_.js +181 -0
  8. package/dist/chunks/rrweb-plugin-console-record-BmAm-Ih_.js.br +0 -0
  9. package/dist/chunks/rrweb-plugin-console-record-BmAm-Ih_.js.gz +0 -0
  10. package/dist/chunks/rrweb-plugin-console-record-Cr-osXuj.js +180 -0
  11. package/dist/chunks/rrweb-plugin-console-record-Cr-osXuj.js.br +0 -0
  12. package/dist/chunks/rrweb-plugin-console-record-Cr-osXuj.js.gz +0 -0
  13. package/dist/chunks/rrweb-record-only-Ba4xyfd6.js +5253 -0
  14. package/dist/chunks/rrweb-record-only-Ba4xyfd6.js.br +0 -0
  15. package/dist/chunks/rrweb-record-only-Ba4xyfd6.js.gz +0 -0
  16. package/dist/chunks/rrweb-record-only-C5Qb-uaQ.js +5253 -0
  17. package/dist/chunks/rrweb-record-only-C5Qb-uaQ.js.br +0 -0
  18. package/dist/chunks/rrweb-record-only-C5Qb-uaQ.js.gz +0 -0
  19. package/dist/inAppReportIssueModal/index.js +171 -129
  20. package/dist/inAppReportIssueModal/integrations.js +84 -19
  21. package/dist/inAppReportIssueModal/state.js +1 -0
  22. package/dist/inAppReportIssueModal/types.js +1 -0
  23. package/dist/inAppReportIssueModal/ui.js +9 -0
  24. package/dist/index.js +259 -60
  25. package/dist/recorder.cjs +1954 -7344
  26. package/dist/recorder.js +1953 -7344
  27. package/dist/recorder.js.br +0 -0
  28. package/dist/recorder.js.gz +0 -0
  29. package/dist/recording.js +41 -32
  30. package/dist/session.js +12 -6
  31. package/dist/types/inAppReportIssueModal/integrations.d.ts +8 -0
  32. package/dist/types/inAppReportIssueModal/types.d.ts +3 -4
  33. package/dist/types/index.d.ts +11 -3
  34. package/dist/types/recording.d.ts +2 -2
  35. package/dist/types/session.d.ts +1 -0
  36. package/dist/types/websocket.d.ts +1 -0
  37. package/dist/websocket.js +11 -10
  38. package/package.json +1 -1
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const e = 5, t = /* @__PURE__ */ new WeakSet();
4
+ let n = false, r = null, o = null;
5
+ const i = "production" !== process.env.NODE_ENV;
6
+ function getDisplayName(e2) {
7
+ const t2 = e2.type;
8
+ if (!t2) return "";
9
+ if ("function" == typeof t2) return t2.displayName || t2.name || "";
10
+ if ("object" == typeof t2 && null !== t2 && t2.$$typeof) {
11
+ if (t2.render) return t2.render.displayName || t2.render.name || "";
12
+ if (t2.type) return (function getDisplayNameFromType(e3) {
13
+ if ("function" == typeof e3) return e3.displayName || e3.name || "";
14
+ return "";
15
+ })(t2.type);
16
+ }
17
+ return "";
18
+ }
19
+ function annotateElement(e2, n2) {
20
+ if (t.has(e2)) return false;
21
+ const r2 = (function findNearestComponentName(e3) {
22
+ const t2 = e3 ? getDisplayName(e3) : "";
23
+ if (t2) return t2;
24
+ let n3 = e3 == null ? void 0 : e3._debugOwner;
25
+ for (; n3; ) {
26
+ const e4 = getDisplayName(n3);
27
+ if (e4) return e4;
28
+ n3 = n3._debugOwner;
29
+ }
30
+ return null;
31
+ })(n2);
32
+ if (!r2) return false;
33
+ const o2 = (function getOwnerChain(e3) {
34
+ const t2 = [];
35
+ let n3 = e3 == null ? void 0 : e3._debugOwner;
36
+ for (; n3; ) {
37
+ const e4 = getDisplayName(n3);
38
+ e4 && !t2.includes(e4) && t2.push(e4), n3 = n3._debugOwner;
39
+ }
40
+ return t2;
41
+ })(n2);
42
+ try {
43
+ return e2.setAttribute("data-sf-component", r2), o2.length > 0 && e2.setAttribute("data-sf-owners", o2.join(",")), t.add(e2), true;
44
+ } catch (e3) {
45
+ return false;
46
+ }
47
+ }
48
+ function processElement(e2) {
49
+ if (t.has(e2)) return false;
50
+ const n2 = (function getFiberFromElement(e3) {
51
+ const t2 = Object.keys(e3), n3 = t2.find((e4) => e4.startsWith("__reactFiber$"));
52
+ if (n3) return e3[n3];
53
+ const r2 = t2.find((e4) => e4.startsWith("__reactInternalInstance$"));
54
+ return r2 ? e3[r2] : null;
55
+ })(e2);
56
+ return !!n2 && annotateElement(e2, n2);
57
+ }
58
+ function processFiberDOM(t2) {
59
+ let n2 = 0;
60
+ t2.tag === e && t2.stateNode instanceof HTMLElement && annotateElement(t2.stateNode, t2) && n2++;
61
+ let r2 = t2.child;
62
+ for (; r2; ) n2 += processFiberDOM(r2), r2 = r2.sibling;
63
+ return n2;
64
+ }
65
+ function processCommit(e2) {
66
+ let t2 = 0;
67
+ try {
68
+ const n2 = e2.current;
69
+ if (!n2) return;
70
+ t2 = processFiberDOM(n2);
71
+ } catch (e3) {
72
+ return void console.warn("[Sailfish] Error processing fiber commit:", e3);
73
+ }
74
+ }
75
+ function createCommitHandler(e2) {
76
+ return function onCommitFiberRoot(t2, n2, r2) {
77
+ try {
78
+ processCommit(n2);
79
+ } catch (e3) {
80
+ console.warn("[Sailfish] Error in onCommitFiberRoot:", e3);
81
+ }
82
+ if (o) try {
83
+ o.call(e2, t2, n2, r2);
84
+ } catch (e3) {
85
+ console.warn("[Sailfish] Error calling original onCommitFiberRoot:", e3);
86
+ }
87
+ };
88
+ }
89
+ exports.installFiberHook = function installFiberHook() {
90
+ var _a;
91
+ if (n) return false;
92
+ if ("undefined" == typeof window) return false;
93
+ try {
94
+ const e2 = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
95
+ if (e2) {
96
+ o = ((_a = e2.onCommitFiberRoot) == null ? void 0 : _a.bind(e2)) || null, r = createCommitHandler(e2);
97
+ try {
98
+ e2.onCommitFiberRoot = r;
99
+ } catch (e3) {
100
+ console.error("[Sailfish Fiber] Failed to replace handler:", e3);
101
+ }
102
+ console.log("[Sailfish] React Fiber hook installed (chained with existing)");
103
+ } else r = createCommitHandler(null), window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = { supportsFiber: true, renderers: /* @__PURE__ */ new Map(), inject(e3) {
104
+ const t2 = this.renderers.size + 1;
105
+ return this.renderers.set(t2, e3), t2;
106
+ }, onCommitFiberRoot: r }, console.log("[Sailfish] React Fiber hook installed (fresh)");
107
+ return n = true, true;
108
+ } catch (e2) {
109
+ return console.warn("[Sailfish] Failed to install fiber hook:", e2), false;
110
+ }
111
+ }, exports.isFiberHookInstalled = function isFiberHookInstalled() {
112
+ return n;
113
+ }, exports.processExistingTree = function processExistingTree() {
114
+ if ("undefined" == typeof window) return;
115
+ if (!i) return;
116
+ let e2 = 0, t2 = 0;
117
+ try {
118
+ const n2 = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, null);
119
+ let r2 = n2.currentNode;
120
+ for (; r2; ) t2++, r2 instanceof HTMLElement && processElement(r2) && e2++, r2 = n2.nextNode();
121
+ } catch (e3) {
122
+ console.warn("[Sailfish Fiber] Error processing existing tree:", e3);
123
+ }
124
+ console.log(`[Sailfish Fiber] Processed existing tree: ${e2} elements annotated out of ${t2} elements`);
125
+ };
@@ -0,0 +1,130 @@
1
+ const e = 5, t = /* @__PURE__ */ new WeakSet();
2
+ let n = false, r = null, o = null;
3
+ const i = "production" !== process.env.NODE_ENV;
4
+ function getDisplayName(e2) {
5
+ const t2 = e2.type;
6
+ if (!t2) return "";
7
+ if ("function" == typeof t2) return t2.displayName || t2.name || "";
8
+ if ("object" == typeof t2 && null !== t2 && t2.$$typeof) {
9
+ if (t2.render) return t2.render.displayName || t2.render.name || "";
10
+ if (t2.type) return (function getDisplayNameFromType(e3) {
11
+ if ("function" == typeof e3) return e3.displayName || e3.name || "";
12
+ return "";
13
+ })(t2.type);
14
+ }
15
+ return "";
16
+ }
17
+ function annotateElement(e2, n2) {
18
+ if (t.has(e2)) return false;
19
+ const r2 = (function findNearestComponentName(e3) {
20
+ const t2 = e3 ? getDisplayName(e3) : "";
21
+ if (t2) return t2;
22
+ let n3 = e3 == null ? void 0 : e3._debugOwner;
23
+ for (; n3; ) {
24
+ const e4 = getDisplayName(n3);
25
+ if (e4) return e4;
26
+ n3 = n3._debugOwner;
27
+ }
28
+ return null;
29
+ })(n2);
30
+ if (!r2) return false;
31
+ const o2 = (function getOwnerChain(e3) {
32
+ const t2 = [];
33
+ let n3 = e3 == null ? void 0 : e3._debugOwner;
34
+ for (; n3; ) {
35
+ const e4 = getDisplayName(n3);
36
+ e4 && !t2.includes(e4) && t2.push(e4), n3 = n3._debugOwner;
37
+ }
38
+ return t2;
39
+ })(n2);
40
+ try {
41
+ return e2.setAttribute("data-sf-component", r2), o2.length > 0 && e2.setAttribute("data-sf-owners", o2.join(",")), t.add(e2), true;
42
+ } catch (e3) {
43
+ return false;
44
+ }
45
+ }
46
+ function processElement(e2) {
47
+ if (t.has(e2)) return false;
48
+ const n2 = (function getFiberFromElement(e3) {
49
+ const t2 = Object.keys(e3), n3 = t2.find((e4) => e4.startsWith("__reactFiber$"));
50
+ if (n3) return e3[n3];
51
+ const r2 = t2.find((e4) => e4.startsWith("__reactInternalInstance$"));
52
+ return r2 ? e3[r2] : null;
53
+ })(e2);
54
+ return !!n2 && annotateElement(e2, n2);
55
+ }
56
+ function processFiberDOM(t2) {
57
+ let n2 = 0;
58
+ t2.tag === e && t2.stateNode instanceof HTMLElement && annotateElement(t2.stateNode, t2) && n2++;
59
+ let r2 = t2.child;
60
+ for (; r2; ) n2 += processFiberDOM(r2), r2 = r2.sibling;
61
+ return n2;
62
+ }
63
+ function processCommit(e2) {
64
+ let t2 = 0;
65
+ try {
66
+ const n2 = e2.current;
67
+ if (!n2) return;
68
+ t2 = processFiberDOM(n2);
69
+ } catch (e3) {
70
+ return void console.warn("[Sailfish] Error processing fiber commit:", e3);
71
+ }
72
+ }
73
+ function createCommitHandler(e2) {
74
+ return function onCommitFiberRoot(t2, n2, r2) {
75
+ try {
76
+ processCommit(n2);
77
+ } catch (e3) {
78
+ console.warn("[Sailfish] Error in onCommitFiberRoot:", e3);
79
+ }
80
+ if (o) try {
81
+ o.call(e2, t2, n2, r2);
82
+ } catch (e3) {
83
+ console.warn("[Sailfish] Error calling original onCommitFiberRoot:", e3);
84
+ }
85
+ };
86
+ }
87
+ function installFiberHook() {
88
+ var _a;
89
+ if (n) return false;
90
+ if ("undefined" == typeof window) return false;
91
+ try {
92
+ const e2 = window.__REACT_DEVTOOLS_GLOBAL_HOOK__;
93
+ if (e2) {
94
+ o = ((_a = e2.onCommitFiberRoot) == null ? void 0 : _a.bind(e2)) || null, r = createCommitHandler(e2);
95
+ try {
96
+ e2.onCommitFiberRoot = r;
97
+ } catch (e3) {
98
+ console.error("[Sailfish Fiber] Failed to replace handler:", e3);
99
+ }
100
+ console.log("[Sailfish] React Fiber hook installed (chained with existing)");
101
+ } else r = createCommitHandler(null), window.__REACT_DEVTOOLS_GLOBAL_HOOK__ = { supportsFiber: true, renderers: /* @__PURE__ */ new Map(), inject(e3) {
102
+ const t2 = this.renderers.size + 1;
103
+ return this.renderers.set(t2, e3), t2;
104
+ }, onCommitFiberRoot: r }, console.log("[Sailfish] React Fiber hook installed (fresh)");
105
+ return n = true, true;
106
+ } catch (e2) {
107
+ return console.warn("[Sailfish] Failed to install fiber hook:", e2), false;
108
+ }
109
+ }
110
+ function isFiberHookInstalled() {
111
+ return n;
112
+ }
113
+ function processExistingTree() {
114
+ if ("undefined" == typeof window) return;
115
+ if (!i) return;
116
+ let e2 = 0, t2 = 0;
117
+ try {
118
+ const n2 = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT, null);
119
+ let r2 = n2.currentNode;
120
+ for (; r2; ) t2++, r2 instanceof HTMLElement && processElement(r2) && e2++, r2 = n2.nextNode();
121
+ } catch (e3) {
122
+ console.warn("[Sailfish Fiber] Error processing existing tree:", e3);
123
+ }
124
+ console.log(`[Sailfish Fiber] Processed existing tree: ${e2} elements annotated out of ${t2} elements`);
125
+ }
126
+ export {
127
+ installFiberHook,
128
+ isFiberHookInstalled,
129
+ processExistingTree
130
+ };
@@ -0,0 +1,181 @@
1
+ var e = Object.defineProperty, y = (t2, n2, r2) => ((t3, n3, r3) => n3 in t3 ? e(t3, n3, { enumerable: true, configurable: true, writable: true, value: r3 }) : t3[n3] = r3)(t2, "symbol" != typeof n2 ? n2 + "" : n2, r2);
2
+ class d {
3
+ constructor(e2) {
4
+ y(this, "fileName"), y(this, "functionName"), y(this, "lineNumber"), y(this, "columnNumber"), this.fileName = e2.fileName || "", this.functionName = e2.functionName || "", this.lineNumber = e2.lineNumber, this.columnNumber = e2.columnNumber;
5
+ }
6
+ toString() {
7
+ const e2 = this.lineNumber || "", t2 = this.columnNumber || "";
8
+ return this.functionName ? `${this.functionName} (${this.fileName}:${e2}:${t2})` : `${this.fileName}:${e2}:${t2}`;
9
+ }
10
+ }
11
+ const t = /(^|@)\S+:\d+/, n = /^\s*at .*(\S+:\d+|\(native\))/m, r = /^(eval@)?(\[native code])?$/, i = { parse: function(e2) {
12
+ return e2 ? typeof e2.stacktrace < "u" || typeof e2["opera#sourceloc"] < "u" ? this.parseOpera(e2) : e2.stack && e2.stack.match(n) ? this.parseV8OrIE(e2) : e2.stack ? this.parseFFOrSafari(e2) : (console.warn("[console-record-plugin]: Failed to parse error object:", e2), []) : [];
13
+ }, extractLocation: function(e2) {
14
+ if (-1 === e2.indexOf(":")) return [e2];
15
+ const t2 = /(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e2.replace(/[()]/g, ""));
16
+ if (!t2) throw new Error(`Cannot parse given url: ${e2}`);
17
+ return [t2[1], t2[2] || void 0, t2[3] || void 0];
18
+ }, parseV8OrIE: function(e2) {
19
+ return e2.stack.split("\n").filter(function(e3) {
20
+ return !!e3.match(n);
21
+ }, this).map(function(e3) {
22
+ e3.indexOf("(eval ") > -1 && (e3 = e3.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(\),.*$)/g, ""));
23
+ let t2 = e3.replace(/^\s+/, "").replace(/\(eval code/g, "(");
24
+ const n2 = t2.match(/ (\((.+):(\d+):(\d+)\)$)/);
25
+ t2 = n2 ? t2.replace(n2[0], "") : t2;
26
+ const r2 = t2.split(/\s+/).slice(1), i2 = this.extractLocation(n2 ? n2[1] : r2.pop()), s2 = r2.join(" ") || void 0, a2 = ["eval", "<anonymous>"].indexOf(i2[0]) > -1 ? void 0 : i2[0];
27
+ return new d({ functionName: s2, fileName: a2, lineNumber: i2[1], columnNumber: i2[2] });
28
+ }, this);
29
+ }, parseFFOrSafari: function(e2) {
30
+ return e2.stack.split("\n").filter(function(e3) {
31
+ return !e3.match(r);
32
+ }, this).map(function(e3) {
33
+ if (e3.indexOf(" > eval") > -1 && (e3 = e3.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ":$1")), -1 === e3.indexOf("@") && -1 === e3.indexOf(":")) return new d({ functionName: e3 });
34
+ {
35
+ const t2 = /((.*".+"[^@]*)?[^@]*)(?:@)/, n2 = e3.match(t2), r2 = n2 && n2[1] ? n2[1] : void 0, i2 = this.extractLocation(e3.replace(t2, ""));
36
+ return new d({ functionName: r2, fileName: i2[0], lineNumber: i2[1], columnNumber: i2[2] });
37
+ }
38
+ }, this);
39
+ }, parseOpera: function(e2) {
40
+ return !e2.stacktrace || e2.message.indexOf("\n") > -1 && e2.message.split("\n").length > e2.stacktrace.split("\n").length ? this.parseOpera9(e2) : e2.stack ? this.parseOpera11(e2) : this.parseOpera10(e2);
41
+ }, parseOpera9: function(e2) {
42
+ const t2 = /Line (\d+).*script (?:in )?(\S+)/i, n2 = e2.message.split("\n"), r2 = [];
43
+ for (let e3 = 2, i2 = n2.length; e3 < i2; e3 += 2) {
44
+ const i3 = t2.exec(n2[e3]);
45
+ i3 && r2.push(new d({ fileName: i3[2], lineNumber: parseFloat(i3[1]) }));
46
+ }
47
+ return r2;
48
+ }, parseOpera10: function(e2) {
49
+ const t2 = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i, n2 = e2.stacktrace.split("\n"), r2 = [];
50
+ for (let e3 = 0, i2 = n2.length; e3 < i2; e3 += 2) {
51
+ const i3 = t2.exec(n2[e3]);
52
+ i3 && r2.push(new d({ functionName: i3[3] || void 0, fileName: i3[2], lineNumber: parseFloat(i3[1]) }));
53
+ }
54
+ return r2;
55
+ }, parseOpera11: function(e2) {
56
+ return e2.stack.split("\n").filter(function(e3) {
57
+ return !!e3.match(t) && !e3.match(/^Error created at/);
58
+ }, this).map(function(e3) {
59
+ const t2 = e3.split("@"), n2 = this.extractLocation(t2.pop()), r2 = (t2.shift() || "").replace(/<anonymous function(: (\w+))?>/, "$2").replace(/\([^)]*\)/g, "") || void 0;
60
+ return new d({ functionName: r2, fileName: n2[0], lineNumber: n2[1], columnNumber: n2[2] });
61
+ }, this);
62
+ } };
63
+ function T(e2) {
64
+ if (!e2 || !e2.outerHTML) return "";
65
+ let t2 = "";
66
+ for (; e2.parentElement; ) {
67
+ let n2 = e2.localName;
68
+ if (!n2) break;
69
+ n2 = n2.toLowerCase();
70
+ const r2 = e2.parentElement, i2 = [];
71
+ if (r2.children && r2.children.length > 0) for (let e3 = 0; e3 < r2.children.length; e3++) {
72
+ const t3 = r2.children[e3];
73
+ t3.localName && t3.localName.toLowerCase && t3.localName.toLowerCase() === n2 && i2.push(t3);
74
+ }
75
+ i2.length > 1 && (n2 += `:eq(${i2.indexOf(e2)})`), t2 = n2 + (t2 ? ">" + t2 : ""), e2 = r2;
76
+ }
77
+ return t2;
78
+ }
79
+ function L(e2) {
80
+ return "[object Object]" === Object.prototype.toString.call(e2);
81
+ }
82
+ function k(e2, t2) {
83
+ if (0 === t2) return true;
84
+ const n2 = Object.keys(e2);
85
+ for (const r2 of n2) if (L(e2[r2]) && k(e2[r2], t2 - 1)) return true;
86
+ return false;
87
+ }
88
+ function g(e2, t2) {
89
+ const n2 = { numOfKeysLimit: 50, depthOfLimit: 4 };
90
+ Object.assign(n2, t2);
91
+ const r2 = [], i2 = [];
92
+ return JSON.stringify(e2, function(e3, t3) {
93
+ if (r2.length > 0) {
94
+ const n3 = r2.indexOf(this);
95
+ ~n3 ? r2.splice(n3 + 1) : r2.push(this), ~n3 ? i2.splice(n3, 1 / 0, e3) : i2.push(e3), ~r2.indexOf(t3) && (t3 = r2[0] === t3 ? "[Circular ~]" : "[Circular ~." + i2.slice(0, r2.indexOf(t3)).join(".") + "]");
96
+ } else r2.push(t3);
97
+ if (null === t3) return t3;
98
+ if (void 0 === t3) return "undefined";
99
+ if ((function c(e4) {
100
+ return !!(L(e4) && Object.keys(e4).length > n2.numOfKeysLimit || "function" == typeof e4 || L(e4) && k(e4, n2.depthOfLimit));
101
+ })(t3)) return (function o(e4) {
102
+ let t4 = e4.toString();
103
+ return n2.stringLengthLimit && t4.length > n2.stringLengthLimit && (t4 = `${t4.slice(0, n2.stringLengthLimit)}...`), t4;
104
+ })(t3);
105
+ if ("bigint" == typeof t3) return t3.toString() + "n";
106
+ if (t3 instanceof Event) {
107
+ const e4 = {};
108
+ for (const n3 in t3) {
109
+ const r3 = t3[n3];
110
+ Array.isArray(r3) ? e4[n3] = T(r3.length ? r3[0] : null) : e4[n3] = r3;
111
+ }
112
+ return e4;
113
+ }
114
+ return t3 instanceof Node ? t3 instanceof HTMLElement ? t3 ? t3.outerHTML : "" : t3.nodeName : t3 instanceof Error ? t3.stack ? t3.stack + "\nEnd of stack for Error object" : t3.name + ": " + t3.message : t3;
115
+ });
116
+ }
117
+ const s = { level: ["assert", "clear", "count", "countReset", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "table", "time", "timeEnd", "timeLog", "trace", "warn"], lengthThreshold: 1e3, logger: "console" };
118
+ function R(e2, t2, n2) {
119
+ const r2 = n2 ? Object.assign({}, s, n2) : s, a2 = r2.logger;
120
+ if (!a2) return () => {
121
+ };
122
+ let u;
123
+ u = "string" == typeof a2 ? t2[a2] : a2;
124
+ let m = 0, h = false;
125
+ const N = [];
126
+ if (r2.level.includes("error")) {
127
+ const l = (t3) => {
128
+ const n3 = t3.message, s2 = t3.error, a3 = i.parse(s2).map((e3) => e3.toString()), u2 = [g(n3, r2.stringifyOptions)];
129
+ e2({ level: "error", trace: a3, payload: u2 });
130
+ };
131
+ t2.addEventListener("error", l), N.push(() => {
132
+ t2.removeEventListener("error", l);
133
+ });
134
+ const f = (t3) => {
135
+ let n3, s2;
136
+ t3.reason instanceof Error ? (n3 = t3.reason, s2 = [g(`Uncaught (in promise) ${n3.name}: ${n3.message}`, r2.stringifyOptions)]) : (n3 = new Error(), s2 = [g("Uncaught (in promise)", r2.stringifyOptions), g(t3.reason, r2.stringifyOptions)]);
137
+ const a3 = i.parse(n3).map((e3) => e3.toString());
138
+ e2({ level: "error", trace: a3, payload: s2 });
139
+ };
140
+ t2.addEventListener("unhandledrejection", f), N.push(() => {
141
+ t2.removeEventListener("unhandledrejection", f);
142
+ });
143
+ }
144
+ for (const e3 of r2.level) N.push(p(u, e3));
145
+ return () => {
146
+ N.forEach((e3) => e3());
147
+ };
148
+ function p(t3, n3) {
149
+ return t3[n3] ? (function P(e3, t4, n4) {
150
+ try {
151
+ if (!(t4 in e3)) return () => {
152
+ };
153
+ const r3 = e3[t4], i2 = n4(r3);
154
+ return "function" == typeof i2 && (i2.prototype = i2.prototype || {}, Object.defineProperties(i2, { __rrweb_original__: { enumerable: false, value: r3 } })), e3[t4] = i2, () => {
155
+ e3[t4] = r3;
156
+ };
157
+ } catch {
158
+ return () => {
159
+ };
160
+ }
161
+ })(t3, n3, (t4) => (...s2) => {
162
+ if (t4.apply(this, s2), !("assert" === n3 && s2[0] || h)) {
163
+ h = true;
164
+ try {
165
+ const t5 = i.parse(new Error()).map((e3) => e3.toString()).splice(1), a3 = ("assert" === n3 ? s2.slice(1) : s2).map((e3) => g(e3, r2.stringifyOptions));
166
+ m++, m < r2.lengthThreshold ? e2({ level: n3, trace: t5, payload: a3 }) : m === r2.lengthThreshold && e2({ level: "warn", trace: [], payload: [g("The number of log records reached the threshold.")] });
167
+ } catch (e3) {
168
+ t4("@sailfish-rrweb/rrweb logger error:", e3, ...s2);
169
+ } finally {
170
+ h = false;
171
+ }
172
+ }
173
+ }) : () => {
174
+ };
175
+ }
176
+ }
177
+ const a = "@sailfish-rrweb/rrweb/console@1", _ = (e2) => ({ name: a, observer: R, options: e2 });
178
+ export {
179
+ a as PLUGIN_NAME,
180
+ _ as getRecordConsolePlugin
181
+ };
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ var e = Object.defineProperty, y = (t2, n2, r2) => ((t3, n3, r3) => n3 in t3 ? e(t3, n3, { enumerable: true, configurable: true, writable: true, value: r3 }) : t3[n3] = r3)(t2, "symbol" != typeof n2 ? n2 + "" : n2, r2);
4
+ class d {
5
+ constructor(e2) {
6
+ y(this, "fileName"), y(this, "functionName"), y(this, "lineNumber"), y(this, "columnNumber"), this.fileName = e2.fileName || "", this.functionName = e2.functionName || "", this.lineNumber = e2.lineNumber, this.columnNumber = e2.columnNumber;
7
+ }
8
+ toString() {
9
+ const e2 = this.lineNumber || "", t2 = this.columnNumber || "";
10
+ return this.functionName ? `${this.functionName} (${this.fileName}:${e2}:${t2})` : `${this.fileName}:${e2}:${t2}`;
11
+ }
12
+ }
13
+ const t = /(^|@)\S+:\d+/, n = /^\s*at .*(\S+:\d+|\(native\))/m, r = /^(eval@)?(\[native code])?$/, i = { parse: function(e2) {
14
+ return e2 ? typeof e2.stacktrace < "u" || typeof e2["opera#sourceloc"] < "u" ? this.parseOpera(e2) : e2.stack && e2.stack.match(n) ? this.parseV8OrIE(e2) : e2.stack ? this.parseFFOrSafari(e2) : (console.warn("[console-record-plugin]: Failed to parse error object:", e2), []) : [];
15
+ }, extractLocation: function(e2) {
16
+ if (-1 === e2.indexOf(":")) return [e2];
17
+ const t2 = /(.+?)(?::(\d+))?(?::(\d+))?$/.exec(e2.replace(/[()]/g, ""));
18
+ if (!t2) throw new Error(`Cannot parse given url: ${e2}`);
19
+ return [t2[1], t2[2] || void 0, t2[3] || void 0];
20
+ }, parseV8OrIE: function(e2) {
21
+ return e2.stack.split("\n").filter(function(e3) {
22
+ return !!e3.match(n);
23
+ }, this).map(function(e3) {
24
+ e3.indexOf("(eval ") > -1 && (e3 = e3.replace(/eval code/g, "eval").replace(/(\(eval at [^()]*)|(\),.*$)/g, ""));
25
+ let t2 = e3.replace(/^\s+/, "").replace(/\(eval code/g, "(");
26
+ const n2 = t2.match(/ (\((.+):(\d+):(\d+)\)$)/);
27
+ t2 = n2 ? t2.replace(n2[0], "") : t2;
28
+ const r2 = t2.split(/\s+/).slice(1), i2 = this.extractLocation(n2 ? n2[1] : r2.pop()), s2 = r2.join(" ") || void 0, a2 = ["eval", "<anonymous>"].indexOf(i2[0]) > -1 ? void 0 : i2[0];
29
+ return new d({ functionName: s2, fileName: a2, lineNumber: i2[1], columnNumber: i2[2] });
30
+ }, this);
31
+ }, parseFFOrSafari: function(e2) {
32
+ return e2.stack.split("\n").filter(function(e3) {
33
+ return !e3.match(r);
34
+ }, this).map(function(e3) {
35
+ if (e3.indexOf(" > eval") > -1 && (e3 = e3.replace(/ line (\d+)(?: > eval line \d+)* > eval:\d+:\d+/g, ":$1")), -1 === e3.indexOf("@") && -1 === e3.indexOf(":")) return new d({ functionName: e3 });
36
+ {
37
+ const t2 = /((.*".+"[^@]*)?[^@]*)(?:@)/, n2 = e3.match(t2), r2 = n2 && n2[1] ? n2[1] : void 0, i2 = this.extractLocation(e3.replace(t2, ""));
38
+ return new d({ functionName: r2, fileName: i2[0], lineNumber: i2[1], columnNumber: i2[2] });
39
+ }
40
+ }, this);
41
+ }, parseOpera: function(e2) {
42
+ return !e2.stacktrace || e2.message.indexOf("\n") > -1 && e2.message.split("\n").length > e2.stacktrace.split("\n").length ? this.parseOpera9(e2) : e2.stack ? this.parseOpera11(e2) : this.parseOpera10(e2);
43
+ }, parseOpera9: function(e2) {
44
+ const t2 = /Line (\d+).*script (?:in )?(\S+)/i, n2 = e2.message.split("\n"), r2 = [];
45
+ for (let e3 = 2, i2 = n2.length; e3 < i2; e3 += 2) {
46
+ const i3 = t2.exec(n2[e3]);
47
+ i3 && r2.push(new d({ fileName: i3[2], lineNumber: parseFloat(i3[1]) }));
48
+ }
49
+ return r2;
50
+ }, parseOpera10: function(e2) {
51
+ const t2 = /Line (\d+).*script (?:in )?(\S+)(?:: In function (\S+))?$/i, n2 = e2.stacktrace.split("\n"), r2 = [];
52
+ for (let e3 = 0, i2 = n2.length; e3 < i2; e3 += 2) {
53
+ const i3 = t2.exec(n2[e3]);
54
+ i3 && r2.push(new d({ functionName: i3[3] || void 0, fileName: i3[2], lineNumber: parseFloat(i3[1]) }));
55
+ }
56
+ return r2;
57
+ }, parseOpera11: function(e2) {
58
+ return e2.stack.split("\n").filter(function(e3) {
59
+ return !!e3.match(t) && !e3.match(/^Error created at/);
60
+ }, this).map(function(e3) {
61
+ const t2 = e3.split("@"), n2 = this.extractLocation(t2.pop()), r2 = (t2.shift() || "").replace(/<anonymous function(: (\w+))?>/, "$2").replace(/\([^)]*\)/g, "") || void 0;
62
+ return new d({ functionName: r2, fileName: n2[0], lineNumber: n2[1], columnNumber: n2[2] });
63
+ }, this);
64
+ } };
65
+ function T(e2) {
66
+ if (!e2 || !e2.outerHTML) return "";
67
+ let t2 = "";
68
+ for (; e2.parentElement; ) {
69
+ let n2 = e2.localName;
70
+ if (!n2) break;
71
+ n2 = n2.toLowerCase();
72
+ const r2 = e2.parentElement, i2 = [];
73
+ if (r2.children && r2.children.length > 0) for (let e3 = 0; e3 < r2.children.length; e3++) {
74
+ const t3 = r2.children[e3];
75
+ t3.localName && t3.localName.toLowerCase && t3.localName.toLowerCase() === n2 && i2.push(t3);
76
+ }
77
+ i2.length > 1 && (n2 += `:eq(${i2.indexOf(e2)})`), t2 = n2 + (t2 ? ">" + t2 : ""), e2 = r2;
78
+ }
79
+ return t2;
80
+ }
81
+ function L(e2) {
82
+ return "[object Object]" === Object.prototype.toString.call(e2);
83
+ }
84
+ function k(e2, t2) {
85
+ if (0 === t2) return true;
86
+ const n2 = Object.keys(e2);
87
+ for (const r2 of n2) if (L(e2[r2]) && k(e2[r2], t2 - 1)) return true;
88
+ return false;
89
+ }
90
+ function g(e2, t2) {
91
+ const n2 = { numOfKeysLimit: 50, depthOfLimit: 4 };
92
+ Object.assign(n2, t2);
93
+ const r2 = [], i2 = [];
94
+ return JSON.stringify(e2, function(e3, t3) {
95
+ if (r2.length > 0) {
96
+ const n3 = r2.indexOf(this);
97
+ ~n3 ? r2.splice(n3 + 1) : r2.push(this), ~n3 ? i2.splice(n3, 1 / 0, e3) : i2.push(e3), ~r2.indexOf(t3) && (t3 = r2[0] === t3 ? "[Circular ~]" : "[Circular ~." + i2.slice(0, r2.indexOf(t3)).join(".") + "]");
98
+ } else r2.push(t3);
99
+ if (null === t3) return t3;
100
+ if (void 0 === t3) return "undefined";
101
+ if ((function c(e4) {
102
+ return !!(L(e4) && Object.keys(e4).length > n2.numOfKeysLimit || "function" == typeof e4 || L(e4) && k(e4, n2.depthOfLimit));
103
+ })(t3)) return (function o(e4) {
104
+ let t4 = e4.toString();
105
+ return n2.stringLengthLimit && t4.length > n2.stringLengthLimit && (t4 = `${t4.slice(0, n2.stringLengthLimit)}...`), t4;
106
+ })(t3);
107
+ if ("bigint" == typeof t3) return t3.toString() + "n";
108
+ if (t3 instanceof Event) {
109
+ const e4 = {};
110
+ for (const n3 in t3) {
111
+ const r3 = t3[n3];
112
+ Array.isArray(r3) ? e4[n3] = T(r3.length ? r3[0] : null) : e4[n3] = r3;
113
+ }
114
+ return e4;
115
+ }
116
+ return t3 instanceof Node ? t3 instanceof HTMLElement ? t3 ? t3.outerHTML : "" : t3.nodeName : t3 instanceof Error ? t3.stack ? t3.stack + "\nEnd of stack for Error object" : t3.name + ": " + t3.message : t3;
117
+ });
118
+ }
119
+ const s = { level: ["assert", "clear", "count", "countReset", "debug", "dir", "dirxml", "error", "group", "groupCollapsed", "groupEnd", "info", "log", "table", "time", "timeEnd", "timeLog", "trace", "warn"], lengthThreshold: 1e3, logger: "console" };
120
+ function R(e2, t2, n2) {
121
+ const r2 = n2 ? Object.assign({}, s, n2) : s, a2 = r2.logger;
122
+ if (!a2) return () => {
123
+ };
124
+ let u;
125
+ u = "string" == typeof a2 ? t2[a2] : a2;
126
+ let m = 0, h = false;
127
+ const b = [];
128
+ if (r2.level.includes("error")) {
129
+ const l = (t3) => {
130
+ const n3 = t3.message, s2 = t3.error, a3 = i.parse(s2).map((e3) => e3.toString()), u2 = [g(n3, r2.stringifyOptions)];
131
+ e2({ level: "error", trace: a3, payload: u2 });
132
+ };
133
+ t2.addEventListener("error", l), b.push(() => {
134
+ t2.removeEventListener("error", l);
135
+ });
136
+ const f = (t3) => {
137
+ let n3, s2;
138
+ t3.reason instanceof Error ? (n3 = t3.reason, s2 = [g(`Uncaught (in promise) ${n3.name}: ${n3.message}`, r2.stringifyOptions)]) : (n3 = new Error(), s2 = [g("Uncaught (in promise)", r2.stringifyOptions), g(t3.reason, r2.stringifyOptions)]);
139
+ const a3 = i.parse(n3).map((e3) => e3.toString());
140
+ e2({ level: "error", trace: a3, payload: s2 });
141
+ };
142
+ t2.addEventListener("unhandledrejection", f), b.push(() => {
143
+ t2.removeEventListener("unhandledrejection", f);
144
+ });
145
+ }
146
+ for (const e3 of r2.level) b.push(p(u, e3));
147
+ return () => {
148
+ b.forEach((e3) => e3());
149
+ };
150
+ function p(t3, n3) {
151
+ return t3[n3] ? (function P(e3, t4, n4) {
152
+ try {
153
+ if (!(t4 in e3)) return () => {
154
+ };
155
+ const r3 = e3[t4], i2 = n4(r3);
156
+ return "function" == typeof i2 && (i2.prototype = i2.prototype || {}, Object.defineProperties(i2, { __rrweb_original__: { enumerable: false, value: r3 } })), e3[t4] = i2, () => {
157
+ e3[t4] = r3;
158
+ };
159
+ } catch {
160
+ return () => {
161
+ };
162
+ }
163
+ })(t3, n3, (t4) => (...s2) => {
164
+ if (t4.apply(this, s2), !("assert" === n3 && s2[0] || h)) {
165
+ h = true;
166
+ try {
167
+ const t5 = i.parse(new Error()).map((e3) => e3.toString()).splice(1), a3 = ("assert" === n3 ? s2.slice(1) : s2).map((e3) => g(e3, r2.stringifyOptions));
168
+ m++, m < r2.lengthThreshold ? e2({ level: n3, trace: t5, payload: a3 }) : m === r2.lengthThreshold && e2({ level: "warn", trace: [], payload: [g("The number of log records reached the threshold.")] });
169
+ } catch (e3) {
170
+ t4("@sailfish-rrweb/rrweb logger error:", e3, ...s2);
171
+ } finally {
172
+ h = false;
173
+ }
174
+ }
175
+ }) : () => {
176
+ };
177
+ }
178
+ }
179
+ const a = "@sailfish-rrweb/rrweb/console@1";
180
+ exports.PLUGIN_NAME = a, exports.getRecordConsolePlugin = (e2) => ({ name: a, observer: R, options: e2 });