@posthog/rrweb-snapshot 0.0.30 → 0.0.32
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/record.cjs +980 -0
- package/dist/record.cjs.map +1 -0
- package/dist/record.d.cts +265 -0
- package/dist/record.d.ts +265 -0
- package/dist/record.js +981 -0
- package/dist/record.js.map +1 -0
- package/dist/record.umd.cjs +1556 -0
- package/dist/record.umd.cjs.map +7 -0
- package/dist/record.umd.min.cjs +32 -0
- package/dist/record.umd.min.cjs.map +7 -0
- package/dist/replay.cjs +4356 -0
- package/dist/replay.cjs.map +1 -0
- package/dist/replay.d.cts +219 -0
- package/dist/replay.d.ts +219 -0
- package/dist/replay.js +4357 -0
- package/dist/replay.js.map +1 -0
- package/dist/replay.umd.cjs +4962 -0
- package/dist/replay.umd.cjs.map +7 -0
- package/dist/replay.umd.min.cjs +60 -0
- package/dist/replay.umd.min.cjs.map +7 -0
- package/dist/rrweb-snapshot.cjs +38 -5816
- package/dist/rrweb-snapshot.cjs.map +1 -1
- package/dist/rrweb-snapshot.js +24 -5802
- package/dist/rrweb-snapshot.js.map +1 -1
- package/dist/rrweb-snapshot.umd.cjs +5581 -5468
- package/dist/rrweb-snapshot.umd.cjs.map +4 -4
- package/dist/rrweb-snapshot.umd.min.cjs +15 -15
- package/dist/rrweb-snapshot.umd.min.cjs.map +4 -4
- package/dist/types-FDk_ocpu.js +535 -0
- package/dist/types-FDk_ocpu.js.map +1 -0
- package/dist/types-pLXhbZlp.cjs +534 -0
- package/dist/types-pLXhbZlp.cjs.map +1 -0
- package/dist/types-pLXhbZlp.umd.cjs +567 -0
- package/dist/types-pLXhbZlp.umd.cjs.map +7 -0
- package/dist/types-pLXhbZlp.umd.min.cjs +32 -0
- package/dist/types-pLXhbZlp.umd.min.cjs.map +7 -0
- package/package.json +26 -6
- /package/dist/{index.d.cts → rrweb-snapshot.d.cts} +0 -0
- /package/dist/{index.d.ts → rrweb-snapshot.d.ts} +0 -0
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
(function (g, f) {
|
|
2
|
+
if ("object" == typeof exports && "object" == typeof module) {
|
|
3
|
+
module.exports = f();
|
|
4
|
+
} else if ("function" == typeof define && define.amd) {
|
|
5
|
+
define("rrwebSnapshot", [], f);
|
|
6
|
+
} else if ("object" == typeof exports) {
|
|
7
|
+
exports["rrwebSnapshot"] = f();
|
|
8
|
+
} else {
|
|
9
|
+
g["rrwebSnapshot"] = f();
|
|
10
|
+
}
|
|
11
|
+
}(this, () => {
|
|
12
|
+
var exports = {};
|
|
13
|
+
var module = { exports };
|
|
14
|
+
"use strict";
|
|
15
|
+
|
|
16
|
+
// dist/types-pLXhbZlp.cjs
|
|
17
|
+
var __defProp = Object.defineProperty;
|
|
18
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
19
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
20
|
+
var NodeType$1 = /* @__PURE__ */ ((NodeType2) => {
|
|
21
|
+
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
22
|
+
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
23
|
+
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
24
|
+
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
25
|
+
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
26
|
+
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
27
|
+
return NodeType2;
|
|
28
|
+
})(NodeType$1 || {});
|
|
29
|
+
var testableAccessors = {
|
|
30
|
+
Node: ["childNodes", "parentNode", "parentElement", "textContent"],
|
|
31
|
+
ShadowRoot: ["host", "styleSheets"],
|
|
32
|
+
Element: ["shadowRoot", "querySelector", "querySelectorAll"],
|
|
33
|
+
MutationObserver: []
|
|
34
|
+
};
|
|
35
|
+
var testableMethods = {
|
|
36
|
+
Node: ["contains", "getRootNode"],
|
|
37
|
+
ShadowRoot: ["getSelection"],
|
|
38
|
+
Element: [],
|
|
39
|
+
MutationObserver: ["constructor"]
|
|
40
|
+
};
|
|
41
|
+
var untaintedBasePrototype = {};
|
|
42
|
+
function angularZoneUnpatchedAlternative(key) {
|
|
43
|
+
var _a, _b;
|
|
44
|
+
const angularUnpatchedVersionSymbol = (_b = (_a = globalThis == null ? void 0 : globalThis.Zone) == null ? void 0 : _a.__symbol__) == null ? void 0 : _b.call(_a, key);
|
|
45
|
+
if (angularUnpatchedVersionSymbol && globalThis[angularUnpatchedVersionSymbol]) {
|
|
46
|
+
return globalThis[angularUnpatchedVersionSymbol];
|
|
47
|
+
} else {
|
|
48
|
+
return void 0;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function getUntaintedPrototype(key) {
|
|
52
|
+
if (untaintedBasePrototype[key])
|
|
53
|
+
return untaintedBasePrototype[key];
|
|
54
|
+
const candidate = angularZoneUnpatchedAlternative(key) || globalThis[key];
|
|
55
|
+
const defaultPrototype = candidate.prototype;
|
|
56
|
+
const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;
|
|
57
|
+
const isUntaintedAccessors = Boolean(
|
|
58
|
+
accessorNames && // @ts-expect-error 2345
|
|
59
|
+
accessorNames.every(
|
|
60
|
+
(accessor) => {
|
|
61
|
+
var _a, _b;
|
|
62
|
+
return Boolean(
|
|
63
|
+
(_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes("[native code]")
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
)
|
|
67
|
+
);
|
|
68
|
+
const methodNames = key in testableMethods ? testableMethods[key] : void 0;
|
|
69
|
+
const isUntaintedMethods = Boolean(
|
|
70
|
+
methodNames && methodNames.every(
|
|
71
|
+
// @ts-expect-error 2345
|
|
72
|
+
(method) => {
|
|
73
|
+
var _a;
|
|
74
|
+
return typeof defaultPrototype[method] === "function" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes("[native code]"));
|
|
75
|
+
}
|
|
76
|
+
)
|
|
77
|
+
);
|
|
78
|
+
if (isUntaintedAccessors && isUntaintedMethods) {
|
|
79
|
+
untaintedBasePrototype[key] = candidate.prototype;
|
|
80
|
+
return candidate.prototype;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const iframeEl = document.createElement("iframe");
|
|
84
|
+
document.body.appendChild(iframeEl);
|
|
85
|
+
const win = iframeEl.contentWindow;
|
|
86
|
+
if (!win) return candidate.prototype;
|
|
87
|
+
const untaintedObject = win[key].prototype;
|
|
88
|
+
document.body.removeChild(iframeEl);
|
|
89
|
+
if (!untaintedObject) return defaultPrototype;
|
|
90
|
+
return untaintedBasePrototype[key] = untaintedObject;
|
|
91
|
+
} catch (e) {
|
|
92
|
+
return defaultPrototype;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
var untaintedAccessorCache = {};
|
|
96
|
+
function getUntaintedAccessor(key, instance, accessor) {
|
|
97
|
+
var _a;
|
|
98
|
+
const cacheKey = `${key}.${String(accessor)}`;
|
|
99
|
+
if (untaintedAccessorCache[cacheKey])
|
|
100
|
+
return untaintedAccessorCache[cacheKey].call(
|
|
101
|
+
instance
|
|
102
|
+
);
|
|
103
|
+
const untaintedPrototype = getUntaintedPrototype(key);
|
|
104
|
+
const untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(
|
|
105
|
+
untaintedPrototype,
|
|
106
|
+
accessor
|
|
107
|
+
)) == null ? void 0 : _a.get;
|
|
108
|
+
if (!untaintedAccessor) return instance[accessor];
|
|
109
|
+
untaintedAccessorCache[cacheKey] = untaintedAccessor;
|
|
110
|
+
return untaintedAccessor.call(instance);
|
|
111
|
+
}
|
|
112
|
+
var untaintedMethodCache = {};
|
|
113
|
+
function getUntaintedMethod(key, instance, method) {
|
|
114
|
+
const cacheKey = `${key}.${String(method)}`;
|
|
115
|
+
if (untaintedMethodCache[cacheKey])
|
|
116
|
+
return untaintedMethodCache[cacheKey].bind(
|
|
117
|
+
instance
|
|
118
|
+
);
|
|
119
|
+
const untaintedPrototype = getUntaintedPrototype(key);
|
|
120
|
+
const untaintedMethod = untaintedPrototype[method];
|
|
121
|
+
if (typeof untaintedMethod !== "function") return instance[method];
|
|
122
|
+
untaintedMethodCache[cacheKey] = untaintedMethod;
|
|
123
|
+
return untaintedMethod.bind(instance);
|
|
124
|
+
}
|
|
125
|
+
function childNodes(n) {
|
|
126
|
+
return getUntaintedAccessor("Node", n, "childNodes");
|
|
127
|
+
}
|
|
128
|
+
function parentNode(n) {
|
|
129
|
+
return getUntaintedAccessor("Node", n, "parentNode");
|
|
130
|
+
}
|
|
131
|
+
function parentElement(n) {
|
|
132
|
+
return getUntaintedAccessor("Node", n, "parentElement");
|
|
133
|
+
}
|
|
134
|
+
function textContent(n) {
|
|
135
|
+
return getUntaintedAccessor("Node", n, "textContent");
|
|
136
|
+
}
|
|
137
|
+
function contains(n, other) {
|
|
138
|
+
return getUntaintedMethod("Node", n, "contains")(other);
|
|
139
|
+
}
|
|
140
|
+
function getRootNode(n) {
|
|
141
|
+
return getUntaintedMethod("Node", n, "getRootNode")();
|
|
142
|
+
}
|
|
143
|
+
function host(n) {
|
|
144
|
+
if (!n || !("host" in n)) return null;
|
|
145
|
+
return getUntaintedAccessor("ShadowRoot", n, "host");
|
|
146
|
+
}
|
|
147
|
+
function styleSheets(n) {
|
|
148
|
+
return n.styleSheets;
|
|
149
|
+
}
|
|
150
|
+
function shadowRoot(n) {
|
|
151
|
+
if (!n || !("shadowRoot" in n)) return null;
|
|
152
|
+
return getUntaintedAccessor("Element", n, "shadowRoot");
|
|
153
|
+
}
|
|
154
|
+
function querySelector(n, selectors) {
|
|
155
|
+
return getUntaintedAccessor("Element", n, "querySelector")(selectors);
|
|
156
|
+
}
|
|
157
|
+
function querySelectorAll(n, selectors) {
|
|
158
|
+
return getUntaintedAccessor("Element", n, "querySelectorAll")(selectors);
|
|
159
|
+
}
|
|
160
|
+
function mutationObserverCtor() {
|
|
161
|
+
return getUntaintedPrototype("MutationObserver").constructor;
|
|
162
|
+
}
|
|
163
|
+
function patch(source, name, replacement) {
|
|
164
|
+
try {
|
|
165
|
+
if (!(name in source)) {
|
|
166
|
+
return () => {
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const original = source[name];
|
|
170
|
+
const wrapped = replacement(original);
|
|
171
|
+
if (typeof wrapped === "function") {
|
|
172
|
+
wrapped.prototype = wrapped.prototype || {};
|
|
173
|
+
Object.defineProperties(wrapped, {
|
|
174
|
+
__rrweb_original__: {
|
|
175
|
+
enumerable: false,
|
|
176
|
+
value: original
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
source[name] = wrapped;
|
|
181
|
+
return () => {
|
|
182
|
+
source[name] = original;
|
|
183
|
+
};
|
|
184
|
+
} catch (e) {
|
|
185
|
+
return () => {
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
var index = {
|
|
190
|
+
childNodes,
|
|
191
|
+
parentNode,
|
|
192
|
+
parentElement,
|
|
193
|
+
textContent,
|
|
194
|
+
contains,
|
|
195
|
+
getRootNode,
|
|
196
|
+
host,
|
|
197
|
+
styleSheets,
|
|
198
|
+
shadowRoot,
|
|
199
|
+
querySelector,
|
|
200
|
+
querySelectorAll,
|
|
201
|
+
mutationObserver: mutationObserverCtor,
|
|
202
|
+
patch
|
|
203
|
+
};
|
|
204
|
+
function isElement(n) {
|
|
205
|
+
return n.nodeType === n.ELEMENT_NODE;
|
|
206
|
+
}
|
|
207
|
+
function isShadowRoot(n) {
|
|
208
|
+
const hostEl = (
|
|
209
|
+
// anchor and textarea elements also have a `host` property
|
|
210
|
+
// but only shadow roots have a `mode` property
|
|
211
|
+
n && "host" in n && "mode" in n && index.host(n) || null
|
|
212
|
+
);
|
|
213
|
+
return Boolean(
|
|
214
|
+
hostEl && "shadowRoot" in hostEl && index.shadowRoot(hostEl) === n
|
|
215
|
+
);
|
|
216
|
+
}
|
|
217
|
+
function isNativeShadowDom(shadowRoot2) {
|
|
218
|
+
return Object.prototype.toString.call(shadowRoot2) === "[object ShadowRoot]";
|
|
219
|
+
}
|
|
220
|
+
function fixBrowserCompatibilityIssuesInCSS(cssText) {
|
|
221
|
+
if (cssText.includes(" background-clip: text;") && !cssText.includes(" -webkit-background-clip: text;")) {
|
|
222
|
+
cssText = cssText.replace(
|
|
223
|
+
/\sbackground-clip:\s*text;/g,
|
|
224
|
+
" -webkit-background-clip: text; background-clip: text;"
|
|
225
|
+
);
|
|
226
|
+
}
|
|
227
|
+
return cssText;
|
|
228
|
+
}
|
|
229
|
+
function escapeImportStatement(rule) {
|
|
230
|
+
const { cssText } = rule;
|
|
231
|
+
if (cssText.split('"').length < 3) return cssText;
|
|
232
|
+
const statement = ["@import", `url(${JSON.stringify(rule.href)})`];
|
|
233
|
+
if (rule.layerName === "") {
|
|
234
|
+
statement.push(`layer`);
|
|
235
|
+
} else if (rule.layerName) {
|
|
236
|
+
statement.push(`layer(${rule.layerName})`);
|
|
237
|
+
}
|
|
238
|
+
if (rule.supportsText) {
|
|
239
|
+
statement.push(`supports(${rule.supportsText})`);
|
|
240
|
+
}
|
|
241
|
+
if (rule.media.length) {
|
|
242
|
+
statement.push(rule.media.mediaText);
|
|
243
|
+
}
|
|
244
|
+
return statement.join(" ") + ";";
|
|
245
|
+
}
|
|
246
|
+
function stringifyStylesheet(s) {
|
|
247
|
+
try {
|
|
248
|
+
const rules = s.rules || s.cssRules;
|
|
249
|
+
if (!rules) {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
let sheetHref = s.href;
|
|
253
|
+
if (!sheetHref && s.ownerNode) {
|
|
254
|
+
sheetHref = s.ownerNode.baseURI;
|
|
255
|
+
}
|
|
256
|
+
const stringifiedRules = Array.from(
|
|
257
|
+
rules,
|
|
258
|
+
(rule) => stringifyRule(rule, sheetHref)
|
|
259
|
+
).join("");
|
|
260
|
+
return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);
|
|
261
|
+
} catch (error) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
function stringifyRule(rule, sheetHref) {
|
|
266
|
+
var _a;
|
|
267
|
+
if (isCSSImportRule(rule)) {
|
|
268
|
+
let importStringified;
|
|
269
|
+
try {
|
|
270
|
+
importStringified = // for same-origin stylesheets,
|
|
271
|
+
// we can access the imported stylesheet rules directly
|
|
272
|
+
stringifyStylesheet(rule.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement
|
|
273
|
+
escapeImportStatement(rule);
|
|
274
|
+
} catch (error) {
|
|
275
|
+
importStringified = rule.cssText;
|
|
276
|
+
}
|
|
277
|
+
try {
|
|
278
|
+
if (importStringified && ((_a = rule.styleSheet) == null ? void 0 : _a.href)) {
|
|
279
|
+
return absolutifyURLs(importStringified, rule.styleSheet.href);
|
|
280
|
+
}
|
|
281
|
+
} catch (e) {
|
|
282
|
+
}
|
|
283
|
+
return importStringified;
|
|
284
|
+
} else {
|
|
285
|
+
let ruleStringified = rule.cssText;
|
|
286
|
+
if (isCSSStyleRule(rule) && rule.selectorText.includes(":")) {
|
|
287
|
+
ruleStringified = fixSafariColons(ruleStringified);
|
|
288
|
+
}
|
|
289
|
+
if (sheetHref) {
|
|
290
|
+
return absolutifyURLs(ruleStringified, sheetHref);
|
|
291
|
+
}
|
|
292
|
+
return ruleStringified;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
function fixSafariColons(cssStringified) {
|
|
296
|
+
const regex = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;
|
|
297
|
+
return cssStringified.replace(regex, "$1\\$2");
|
|
298
|
+
}
|
|
299
|
+
function isCSSImportRule(rule) {
|
|
300
|
+
return "styleSheet" in rule;
|
|
301
|
+
}
|
|
302
|
+
function isCSSStyleRule(rule) {
|
|
303
|
+
return "selectorText" in rule;
|
|
304
|
+
}
|
|
305
|
+
var Mirror = class {
|
|
306
|
+
constructor() {
|
|
307
|
+
__publicField(this, "idNodeMap", /* @__PURE__ */ new Map());
|
|
308
|
+
__publicField(this, "nodeMetaMap", /* @__PURE__ */ new WeakMap());
|
|
309
|
+
}
|
|
310
|
+
getId(n) {
|
|
311
|
+
var _a;
|
|
312
|
+
if (!n) return -1;
|
|
313
|
+
const id = (_a = this.getMeta(n)) == null ? void 0 : _a.id;
|
|
314
|
+
return id != null ? id : -1;
|
|
315
|
+
}
|
|
316
|
+
getNode(id) {
|
|
317
|
+
return this.idNodeMap.get(id) || null;
|
|
318
|
+
}
|
|
319
|
+
getIds() {
|
|
320
|
+
return Array.from(this.idNodeMap.keys());
|
|
321
|
+
}
|
|
322
|
+
getMeta(n) {
|
|
323
|
+
return this.nodeMetaMap.get(n) || null;
|
|
324
|
+
}
|
|
325
|
+
// removes the node from idNodeMap
|
|
326
|
+
// doesn't remove the node from nodeMetaMap
|
|
327
|
+
removeNodeFromMap(n) {
|
|
328
|
+
const id = this.getId(n);
|
|
329
|
+
this.idNodeMap.delete(id);
|
|
330
|
+
if (n.childNodes) {
|
|
331
|
+
n.childNodes.forEach(
|
|
332
|
+
(childNode) => this.removeNodeFromMap(childNode)
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
has(id) {
|
|
337
|
+
return this.idNodeMap.has(id);
|
|
338
|
+
}
|
|
339
|
+
hasNode(node) {
|
|
340
|
+
return this.nodeMetaMap.has(node);
|
|
341
|
+
}
|
|
342
|
+
add(n, meta) {
|
|
343
|
+
const id = meta.id;
|
|
344
|
+
this.idNodeMap.set(id, n);
|
|
345
|
+
this.nodeMetaMap.set(n, meta);
|
|
346
|
+
}
|
|
347
|
+
replace(id, n) {
|
|
348
|
+
const oldNode = this.getNode(id);
|
|
349
|
+
if (oldNode) {
|
|
350
|
+
const meta = this.nodeMetaMap.get(oldNode);
|
|
351
|
+
if (meta) this.nodeMetaMap.set(n, meta);
|
|
352
|
+
}
|
|
353
|
+
this.idNodeMap.set(id, n);
|
|
354
|
+
}
|
|
355
|
+
reset() {
|
|
356
|
+
this.idNodeMap = /* @__PURE__ */ new Map();
|
|
357
|
+
this.nodeMetaMap = /* @__PURE__ */ new WeakMap();
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
function createMirror() {
|
|
361
|
+
return new Mirror();
|
|
362
|
+
}
|
|
363
|
+
function maskInputValue({
|
|
364
|
+
element,
|
|
365
|
+
maskInputOptions,
|
|
366
|
+
tagName,
|
|
367
|
+
type,
|
|
368
|
+
value,
|
|
369
|
+
maskInputFn
|
|
370
|
+
}) {
|
|
371
|
+
let text = value || "";
|
|
372
|
+
const actualType = type && toLowerCase(type);
|
|
373
|
+
if (maskInputOptions[tagName.toLowerCase()] || actualType && maskInputOptions[actualType]) {
|
|
374
|
+
if (maskInputFn) {
|
|
375
|
+
text = maskInputFn(text, element);
|
|
376
|
+
} else {
|
|
377
|
+
text = "*".repeat(text.length);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return text;
|
|
381
|
+
}
|
|
382
|
+
function toLowerCase(str) {
|
|
383
|
+
return str.toLowerCase();
|
|
384
|
+
}
|
|
385
|
+
var ORIGINAL_ATTRIBUTE_NAME = "__rrweb_original__";
|
|
386
|
+
function is2DCanvasBlank(canvas) {
|
|
387
|
+
const ctx = canvas.getContext("2d");
|
|
388
|
+
if (!ctx) return true;
|
|
389
|
+
const chunkSize = 50;
|
|
390
|
+
for (let x = 0; x < canvas.width; x += chunkSize) {
|
|
391
|
+
for (let y = 0; y < canvas.height; y += chunkSize) {
|
|
392
|
+
const getImageData = ctx.getImageData;
|
|
393
|
+
const originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData ? getImageData[ORIGINAL_ATTRIBUTE_NAME] : getImageData;
|
|
394
|
+
const pixelBuffer = new Uint32Array(
|
|
395
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access
|
|
396
|
+
originalGetImageData.call(
|
|
397
|
+
ctx,
|
|
398
|
+
x,
|
|
399
|
+
y,
|
|
400
|
+
Math.min(chunkSize, canvas.width - x),
|
|
401
|
+
Math.min(chunkSize, canvas.height - y)
|
|
402
|
+
).data.buffer
|
|
403
|
+
);
|
|
404
|
+
if (pixelBuffer.some((pixel) => pixel !== 0)) return false;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
return true;
|
|
408
|
+
}
|
|
409
|
+
function isNodeMetaEqual(a, b) {
|
|
410
|
+
if (!a || !b || a.type !== b.type) return false;
|
|
411
|
+
if (a.type === NodeType$1.Document)
|
|
412
|
+
return a.compatMode === b.compatMode;
|
|
413
|
+
else if (a.type === NodeType$1.DocumentType)
|
|
414
|
+
return a.name === b.name && a.publicId === b.publicId && a.systemId === b.systemId;
|
|
415
|
+
else if (a.type === NodeType$1.Comment || a.type === NodeType$1.Text || a.type === NodeType$1.CDATA)
|
|
416
|
+
return a.textContent === b.textContent;
|
|
417
|
+
else if (a.type === NodeType$1.Element)
|
|
418
|
+
return a.tagName === b.tagName && JSON.stringify(a.attributes) === JSON.stringify(b.attributes) && a.isSVG === b.isSVG && a.needBlock === b.needBlock;
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
function getInputType(element) {
|
|
422
|
+
const type = element.type;
|
|
423
|
+
return element.hasAttribute("data-rr-is-password") ? "password" : type ? (
|
|
424
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
425
|
+
toLowerCase(type)
|
|
426
|
+
) : null;
|
|
427
|
+
}
|
|
428
|
+
function extractFileExtension(path, baseURL) {
|
|
429
|
+
var _a;
|
|
430
|
+
let url;
|
|
431
|
+
try {
|
|
432
|
+
url = new URL(path, baseURL != null ? baseURL : window.location.href);
|
|
433
|
+
} catch (err) {
|
|
434
|
+
return null;
|
|
435
|
+
}
|
|
436
|
+
const regex = /\.([0-9a-z]+)(?:$)/i;
|
|
437
|
+
const match = url.pathname.match(regex);
|
|
438
|
+
return (_a = match == null ? void 0 : match[1]) != null ? _a : null;
|
|
439
|
+
}
|
|
440
|
+
function extractOrigin(url) {
|
|
441
|
+
let origin = "";
|
|
442
|
+
if (url.indexOf("//") > -1) {
|
|
443
|
+
origin = url.split("/").slice(0, 3).join("/");
|
|
444
|
+
} else {
|
|
445
|
+
origin = url.split("/")[0];
|
|
446
|
+
}
|
|
447
|
+
origin = origin.split("?")[0];
|
|
448
|
+
return origin;
|
|
449
|
+
}
|
|
450
|
+
var URL_IN_CSS_REF = /url\((?:(')([^']*)'|(")(.*?)"|([^)]*))\)/gm;
|
|
451
|
+
var URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\/\//i;
|
|
452
|
+
var URL_WWW_MATCH = /^www\..*/i;
|
|
453
|
+
var DATA_URI = /^(data:)([^,]*),(.*)/i;
|
|
454
|
+
function absolutifyURLs(cssText, href) {
|
|
455
|
+
return (cssText || "").replace(
|
|
456
|
+
URL_IN_CSS_REF,
|
|
457
|
+
(origin, quote1, path1, quote2, path2, path3) => {
|
|
458
|
+
const filePath = path1 || path2 || path3;
|
|
459
|
+
const maybeQuote = quote1 || quote2 || "";
|
|
460
|
+
if (!filePath) {
|
|
461
|
+
return origin;
|
|
462
|
+
}
|
|
463
|
+
if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {
|
|
464
|
+
return `url(${maybeQuote}${filePath}${maybeQuote})`;
|
|
465
|
+
}
|
|
466
|
+
if (DATA_URI.test(filePath)) {
|
|
467
|
+
return `url(${maybeQuote}${filePath}${maybeQuote})`;
|
|
468
|
+
}
|
|
469
|
+
if (filePath[0] === "/") {
|
|
470
|
+
return `url(${maybeQuote}${extractOrigin(href) + filePath}${maybeQuote})`;
|
|
471
|
+
}
|
|
472
|
+
const stack = href.split("/");
|
|
473
|
+
const parts = filePath.split("/");
|
|
474
|
+
stack.pop();
|
|
475
|
+
for (const part of parts) {
|
|
476
|
+
if (part === ".") {
|
|
477
|
+
continue;
|
|
478
|
+
} else if (part === "..") {
|
|
479
|
+
stack.pop();
|
|
480
|
+
} else {
|
|
481
|
+
stack.push(part);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
return `url(${maybeQuote}${stack.join("/")}${maybeQuote})`;
|
|
485
|
+
}
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
var STRIPED_PLACEHOLDER_SVG = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzPgogICAgPHBhdHRlcm4gaWQ9InN0cmlwZXMiIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+CiAgICAgIDxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iYmxhY2siLz4KICAgICAgPHBhdGggZD0iTTggMEgxNkwwIDE2VjhMOCAwWiIgZmlsbD0iIzJEMkQyRCIvPgogICAgICA8cGF0aCBkPSJNMTYgOFYxNkg4TDE2IDhaIiBmaWxsPSIjMkQyRDJEIi8+CiAgICA8L3BhdHRlcm4+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjc3RyaXBlcykiLz4KPC9zdmc+Cg==";
|
|
489
|
+
var MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION = 4096;
|
|
490
|
+
function recompressBase64Image(img, dataURL, type, quality) {
|
|
491
|
+
if (!img.complete || img.naturalWidth === 0) {
|
|
492
|
+
return dataURL;
|
|
493
|
+
}
|
|
494
|
+
if (img.naturalWidth > MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION || img.naturalHeight > MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION) {
|
|
495
|
+
return dataURL;
|
|
496
|
+
}
|
|
497
|
+
try {
|
|
498
|
+
const canvas = document.createElement("canvas");
|
|
499
|
+
canvas.width = img.naturalWidth;
|
|
500
|
+
canvas.height = img.naturalHeight;
|
|
501
|
+
const ctx = canvas.getContext("2d");
|
|
502
|
+
if (!ctx) {
|
|
503
|
+
return dataURL;
|
|
504
|
+
}
|
|
505
|
+
ctx.drawImage(img, 0, 0);
|
|
506
|
+
const recompressed = canvas.toDataURL(type || "image/webp", quality != null ? quality : 0.4);
|
|
507
|
+
return recompressed;
|
|
508
|
+
} catch (err) {
|
|
509
|
+
return dataURL;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
function checkDataURLSize(dataURL, maxLength) {
|
|
513
|
+
if (!maxLength || dataURL.length <= maxLength) {
|
|
514
|
+
return dataURL;
|
|
515
|
+
}
|
|
516
|
+
return STRIPED_PLACEHOLDER_SVG;
|
|
517
|
+
}
|
|
518
|
+
var NodeType = /* @__PURE__ */ ((NodeType2) => {
|
|
519
|
+
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
520
|
+
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
521
|
+
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
522
|
+
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
523
|
+
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
524
|
+
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
525
|
+
return NodeType2;
|
|
526
|
+
})(NodeType || {});
|
|
527
|
+
exports.Mirror = Mirror;
|
|
528
|
+
exports.NodeType = NodeType;
|
|
529
|
+
exports.NodeType$1 = NodeType$1;
|
|
530
|
+
exports.absolutifyURLs = absolutifyURLs;
|
|
531
|
+
exports.checkDataURLSize = checkDataURLSize;
|
|
532
|
+
exports.createMirror = createMirror;
|
|
533
|
+
exports.escapeImportStatement = escapeImportStatement;
|
|
534
|
+
exports.extractFileExtension = extractFileExtension;
|
|
535
|
+
exports.fixSafariColons = fixSafariColons;
|
|
536
|
+
exports.getInputType = getInputType;
|
|
537
|
+
exports.index = index;
|
|
538
|
+
exports.is2DCanvasBlank = is2DCanvasBlank;
|
|
539
|
+
exports.isCSSImportRule = isCSSImportRule;
|
|
540
|
+
exports.isCSSStyleRule = isCSSStyleRule;
|
|
541
|
+
exports.isElement = isElement;
|
|
542
|
+
exports.isNativeShadowDom = isNativeShadowDom;
|
|
543
|
+
exports.isNodeMetaEqual = isNodeMetaEqual;
|
|
544
|
+
exports.isShadowRoot = isShadowRoot;
|
|
545
|
+
exports.maskInputValue = maskInputValue;
|
|
546
|
+
exports.recompressBase64Image = recompressBase64Image;
|
|
547
|
+
exports.stringifyRule = stringifyRule;
|
|
548
|
+
exports.stringifyStylesheet = stringifyStylesheet;
|
|
549
|
+
exports.toLowerCase = toLowerCase;
|
|
550
|
+
if (typeof module.exports == "object" && typeof exports == "object") {
|
|
551
|
+
var __cp = (to, from, except, desc) => {
|
|
552
|
+
if ((from && typeof from === "object") || typeof from === "function") {
|
|
553
|
+
for (let key of Object.getOwnPropertyNames(from)) {
|
|
554
|
+
if (!Object.prototype.hasOwnProperty.call(to, key) && key !== except)
|
|
555
|
+
Object.defineProperty(to, key, {
|
|
556
|
+
get: () => from[key],
|
|
557
|
+
enumerable: !(desc = Object.getOwnPropertyDescriptor(from, key)) || desc.enumerable,
|
|
558
|
+
});
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
return to;
|
|
562
|
+
};
|
|
563
|
+
module.exports = __cp(module.exports, exports);
|
|
564
|
+
}
|
|
565
|
+
return module.exports;
|
|
566
|
+
}))
|
|
567
|
+
//# sourceMappingURL=types-pLXhbZlp.umd.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../types/dist/rrweb-types.js", "../../utils/dist/rrweb-utils.js", "../src/utils.ts", "../src/types.ts"],
|
|
4
|
+
"sourcesContent": ["var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n IncrementalSource2[IncrementalSource2[\"CustomElement\"] = 16] = \"CustomElement\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar PointerTypes = /* @__PURE__ */ ((PointerTypes2) => {\n PointerTypes2[PointerTypes2[\"Mouse\"] = 0] = \"Mouse\";\n PointerTypes2[PointerTypes2[\"Pen\"] = 1] = \"Pen\";\n PointerTypes2[PointerTypes2[\"Touch\"] = 2] = \"Touch\";\n return PointerTypes2;\n})(PointerTypes || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar MediaInteractions = /* @__PURE__ */ ((MediaInteractions2) => {\n MediaInteractions2[MediaInteractions2[\"Play\"] = 0] = \"Play\";\n MediaInteractions2[MediaInteractions2[\"Pause\"] = 1] = \"Pause\";\n MediaInteractions2[MediaInteractions2[\"Seeked\"] = 2] = \"Seeked\";\n MediaInteractions2[MediaInteractions2[\"VolumeChange\"] = 3] = \"VolumeChange\";\n MediaInteractions2[MediaInteractions2[\"RateChange\"] = 4] = \"RateChange\";\n return MediaInteractions2;\n})(MediaInteractions || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\nvar NodeType = /* @__PURE__ */ ((NodeType2) => {\n NodeType2[NodeType2[\"Document\"] = 0] = \"Document\";\n NodeType2[NodeType2[\"DocumentType\"] = 1] = \"DocumentType\";\n NodeType2[NodeType2[\"Element\"] = 2] = \"Element\";\n NodeType2[NodeType2[\"Text\"] = 3] = \"Text\";\n NodeType2[NodeType2[\"CDATA\"] = 4] = \"CDATA\";\n NodeType2[NodeType2[\"Comment\"] = 5] = \"Comment\";\n return NodeType2;\n})(NodeType || {});\nexport {\n CanvasContext,\n EventType,\n IncrementalSource,\n MediaInteractions,\n MouseInteractions,\n NodeType,\n PointerTypes,\n ReplayerEvents\n};\n//# sourceMappingURL=rrweb-types.js.map\n", "const testableAccessors = {\n Node: [\"childNodes\", \"parentNode\", \"parentElement\", \"textContent\"],\n ShadowRoot: [\"host\", \"styleSheets\"],\n Element: [\"shadowRoot\", \"querySelector\", \"querySelectorAll\"],\n MutationObserver: []\n};\nconst testableMethods = {\n Node: [\"contains\", \"getRootNode\"],\n ShadowRoot: [\"getSelection\"],\n Element: [],\n MutationObserver: [\"constructor\"]\n};\nconst untaintedBasePrototype = {};\nfunction angularZoneUnpatchedAlternative(key) {\n var _a, _b;\n const angularUnpatchedVersionSymbol = (_b = (_a = globalThis == null ? void 0 : globalThis.Zone) == null ? void 0 : _a.__symbol__) == null ? void 0 : _b.call(_a, key);\n if (angularUnpatchedVersionSymbol && globalThis[angularUnpatchedVersionSymbol]) {\n return globalThis[angularUnpatchedVersionSymbol];\n } else {\n return void 0;\n }\n}\nfunction getUntaintedPrototype(key) {\n if (untaintedBasePrototype[key])\n return untaintedBasePrototype[key];\n const candidate = angularZoneUnpatchedAlternative(key) || globalThis[key];\n const defaultPrototype = candidate.prototype;\n const accessorNames = key in testableAccessors ? testableAccessors[key] : void 0;\n const isUntaintedAccessors = Boolean(\n accessorNames && // @ts-expect-error 2345\n accessorNames.every(\n (accessor) => {\n var _a, _b;\n return Boolean(\n (_b = (_a = Object.getOwnPropertyDescriptor(defaultPrototype, accessor)) == null ? void 0 : _a.get) == null ? void 0 : _b.toString().includes(\"[native code]\")\n );\n }\n )\n );\n const methodNames = key in testableMethods ? testableMethods[key] : void 0;\n const isUntaintedMethods = Boolean(\n methodNames && methodNames.every(\n // @ts-expect-error 2345\n (method) => {\n var _a;\n return typeof defaultPrototype[method] === \"function\" && ((_a = defaultPrototype[method]) == null ? void 0 : _a.toString().includes(\"[native code]\"));\n }\n )\n );\n if (isUntaintedAccessors && isUntaintedMethods) {\n untaintedBasePrototype[key] = candidate.prototype;\n return candidate.prototype;\n }\n try {\n const iframeEl = document.createElement(\"iframe\");\n document.body.appendChild(iframeEl);\n const win = iframeEl.contentWindow;\n if (!win) return candidate.prototype;\n const untaintedObject = win[key].prototype;\n document.body.removeChild(iframeEl);\n if (!untaintedObject) return defaultPrototype;\n return untaintedBasePrototype[key] = untaintedObject;\n } catch {\n return defaultPrototype;\n }\n}\nconst untaintedAccessorCache = {};\nfunction getUntaintedAccessor(key, instance, accessor) {\n var _a;\n const cacheKey = `${key}.${String(accessor)}`;\n if (untaintedAccessorCache[cacheKey])\n return untaintedAccessorCache[cacheKey].call(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedAccessor = (_a = Object.getOwnPropertyDescriptor(\n untaintedPrototype,\n accessor\n )) == null ? void 0 : _a.get;\n if (!untaintedAccessor) return instance[accessor];\n untaintedAccessorCache[cacheKey] = untaintedAccessor;\n return untaintedAccessor.call(instance);\n}\nconst untaintedMethodCache = {};\nfunction getUntaintedMethod(key, instance, method) {\n const cacheKey = `${key}.${String(method)}`;\n if (untaintedMethodCache[cacheKey])\n return untaintedMethodCache[cacheKey].bind(\n instance\n );\n const untaintedPrototype = getUntaintedPrototype(key);\n const untaintedMethod = untaintedPrototype[method];\n if (typeof untaintedMethod !== \"function\") return instance[method];\n untaintedMethodCache[cacheKey] = untaintedMethod;\n return untaintedMethod.bind(instance);\n}\nfunction childNodes(n) {\n return getUntaintedAccessor(\"Node\", n, \"childNodes\");\n}\nfunction parentNode(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentNode\");\n}\nfunction parentElement(n) {\n return getUntaintedAccessor(\"Node\", n, \"parentElement\");\n}\nfunction textContent(n) {\n return getUntaintedAccessor(\"Node\", n, \"textContent\");\n}\nfunction contains(n, other) {\n return getUntaintedMethod(\"Node\", n, \"contains\")(other);\n}\nfunction getRootNode(n) {\n return getUntaintedMethod(\"Node\", n, \"getRootNode\")();\n}\nfunction host(n) {\n if (!n || !(\"host\" in n)) return null;\n return getUntaintedAccessor(\"ShadowRoot\", n, \"host\");\n}\nfunction styleSheets(n) {\n return n.styleSheets;\n}\nfunction shadowRoot(n) {\n if (!n || !(\"shadowRoot\" in n)) return null;\n return getUntaintedAccessor(\"Element\", n, \"shadowRoot\");\n}\nfunction querySelector(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelector\")(selectors);\n}\nfunction querySelectorAll(n, selectors) {\n return getUntaintedAccessor(\"Element\", n, \"querySelectorAll\")(selectors);\n}\nfunction mutationObserverCtor() {\n return getUntaintedPrototype(\"MutationObserver\").constructor;\n}\nfunction patch(source, name, replacement) {\n try {\n if (!(name in source)) {\n return () => {\n };\n }\n const original = source[name];\n const wrapped = replacement(original);\n if (typeof wrapped === \"function\") {\n wrapped.prototype = wrapped.prototype || {};\n Object.defineProperties(wrapped, {\n __rrweb_original__: {\n enumerable: false,\n value: original\n }\n });\n }\n source[name] = wrapped;\n return () => {\n source[name] = original;\n };\n } catch {\n return () => {\n };\n }\n}\nconst index = {\n childNodes,\n parentNode,\n parentElement,\n textContent,\n contains,\n getRootNode,\n host,\n styleSheets,\n shadowRoot,\n querySelector,\n querySelectorAll,\n mutationObserver: mutationObserverCtor,\n patch\n};\nexport {\n childNodes,\n contains,\n index as default,\n getRootNode,\n getUntaintedAccessor,\n getUntaintedMethod,\n getUntaintedPrototype,\n host,\n mutationObserverCtor,\n parentElement,\n parentNode,\n patch,\n querySelector,\n querySelectorAll,\n shadowRoot,\n styleSheets,\n textContent\n};\n//# sourceMappingURL=rrweb-utils.js.map\n", "import type {\n idNodeMap,\n MaskInputFn,\n MaskInputOptions,\n nodeMetaMap,\n} from './types';\n\nimport { NodeType } from '@posthog/rrweb-types';\nimport type {\n IMirror,\n serializedNodeWithId,\n serializedNode,\n documentNode,\n documentTypeNode,\n textNode,\n elementNode,\n} from '@posthog/rrweb-types';\nimport dom from '@posthog/rrweb-utils';\n\nexport function isElement(n: Node): n is Element {\n return n.nodeType === n.ELEMENT_NODE;\n}\n\nexport function isShadowRoot(n: Node): n is ShadowRoot {\n const hostEl: Element | null =\n // anchor and textarea elements also have a `host` property\n // but only shadow roots have a `mode` property\n (n && 'host' in n && 'mode' in n && dom.host(n as ShadowRoot)) || null;\n return Boolean(\n hostEl && 'shadowRoot' in hostEl && dom.shadowRoot(hostEl) === n,\n );\n}\n\n/**\n * To fix the issue https://github.com/rrweb-io/rrweb/issues/933.\n * Some websites use polyfilled shadow dom and this function is used to detect this situation.\n */\nexport function isNativeShadowDom(shadowRoot: ShadowRoot): boolean {\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\n}\n\n/**\n * Browsers sometimes destructively modify the css rules they receive.\n * This function tries to rectify the modifications the browser made to make it more cross platform compatible.\n * @param cssText - output of `CSSStyleRule.cssText`\n * @returns `cssText` with browser inconsistencies fixed.\n */\nfunction fixBrowserCompatibilityIssuesInCSS(cssText: string): string {\n /**\n * Chrome outputs `-webkit-background-clip` as `background-clip` in `CSSStyleRule.cssText`.\n * But then Chrome ignores `background-clip` as css input.\n * Re-introduce `-webkit-background-clip` to fix this issue.\n */\n if (\n cssText.includes(' background-clip: text;') &&\n !cssText.includes(' -webkit-background-clip: text;')\n ) {\n cssText = cssText.replace(\n /\\sbackground-clip:\\s*text;/g,\n ' -webkit-background-clip: text; background-clip: text;',\n );\n }\n return cssText;\n}\n\n// Remove this declaration once typescript has added `CSSImportRule.supportsText` to the lib.\ndeclare interface CSSImportRule extends CSSRule {\n readonly href: string;\n readonly layerName: string | null;\n readonly media: MediaList;\n readonly styleSheet: CSSStyleSheet;\n /**\n * experimental API, currently only supported in firefox\n * https://developer.mozilla.org/en-US/docs/Web/API/CSSImportRule/supportsText\n */\n readonly supportsText?: string | null;\n}\n\n/**\n * Browsers sometimes incorrectly escape `@import` on `.cssText` statements.\n * This function tries to correct the escaping.\n * more info: https://bugs.chromium.org/p/chromium/issues/detail?id=1472259\n * @param cssImportRule\n * @returns `cssText` with browser inconsistencies fixed, or null if not applicable.\n */\nexport function escapeImportStatement(rule: CSSImportRule): string {\n const { cssText } = rule;\n if (cssText.split('\"').length < 3) return cssText;\n\n const statement = ['@import', `url(${JSON.stringify(rule.href)})`];\n if (rule.layerName === '') {\n statement.push(`layer`);\n } else if (rule.layerName) {\n statement.push(`layer(${rule.layerName})`);\n }\n if (rule.supportsText) {\n statement.push(`supports(${rule.supportsText})`);\n }\n if (rule.media.length) {\n statement.push(rule.media.mediaText);\n }\n return statement.join(' ') + ';';\n}\n\nexport function stringifyStylesheet(s: CSSStyleSheet): string | null {\n try {\n const rules = s.rules || s.cssRules;\n if (!rules) {\n return null;\n }\n let sheetHref = s.href;\n if (!sheetHref && s.ownerNode) {\n // an inline <style> element\n sheetHref = s.ownerNode.baseURI;\n }\n const stringifiedRules = Array.from(rules, (rule: CSSRule) =>\n stringifyRule(rule, sheetHref),\n ).join('');\n return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);\n } catch (error) {\n return null;\n }\n}\n\nexport function stringifyRule(rule: CSSRule, sheetHref: string | null): string {\n if (isCSSImportRule(rule)) {\n let importStringified;\n try {\n importStringified =\n // for same-origin stylesheets,\n // we can access the imported stylesheet rules directly\n stringifyStylesheet(rule.styleSheet) ||\n // work around browser issues with the raw string `@import url(...)` statement\n escapeImportStatement(rule);\n } catch (error) {\n importStringified = rule.cssText;\n }\n // if importStringified is not null,\n // there should be a stylesheet and a rule here,\n // but we avoid errors in this method by checking for null\n // see https://github.com/rrweb-io/rrweb/pull/1686\n try {\n if (importStringified && rule.styleSheet?.href) {\n // url()s within the imported stylesheet are relative to _that_ sheet's href\n return absolutifyURLs(importStringified, rule.styleSheet.href);\n }\n } catch {\n // swallow this, we'll return null\n }\n return importStringified;\n } else {\n let ruleStringified = rule.cssText;\n if (isCSSStyleRule(rule) && rule.selectorText.includes(':')) {\n // Safari does not escape selectors with : properly\n // see https://bugs.webkit.org/show_bug.cgi?id=184604\n ruleStringified = fixSafariColons(ruleStringified);\n }\n if (sheetHref) {\n return absolutifyURLs(ruleStringified, sheetHref);\n }\n return ruleStringified;\n }\n}\n\nexport function fixSafariColons(cssStringified: string): string {\n // Replace e.g. [aa:bb] with [aa\\\\:bb]\n const regex = /(\\[(?:[\\w-]+)[^\\\\])(:(?:[\\w-]+)\\])/gm;\n return cssStringified.replace(regex, '$1\\\\$2');\n}\n\nexport function isCSSImportRule(rule: CSSRule): rule is CSSImportRule {\n return 'styleSheet' in rule;\n}\n\nexport function isCSSStyleRule(rule: CSSRule): rule is CSSStyleRule {\n return 'selectorText' in rule;\n}\n\nexport class Mirror implements IMirror<Node> {\n private idNodeMap: idNodeMap = new Map();\n private nodeMetaMap: nodeMetaMap = new WeakMap();\n\n getId(n: Node | undefined | null): number {\n if (!n) return -1;\n\n const id = this.getMeta(n)?.id;\n\n // if n is not a serialized Node, use -1 as its id.\n return id ?? -1;\n }\n\n getNode(id: number): Node | null {\n return this.idNodeMap.get(id) || null;\n }\n\n getIds(): number[] {\n return Array.from(this.idNodeMap.keys());\n }\n\n getMeta(n: Node): serializedNodeWithId | null {\n return this.nodeMetaMap.get(n) || null;\n }\n\n // removes the node from idNodeMap\n // doesn't remove the node from nodeMetaMap\n removeNodeFromMap(n: Node) {\n const id = this.getId(n);\n this.idNodeMap.delete(id);\n\n if (n.childNodes) {\n n.childNodes.forEach((childNode) =>\n this.removeNodeFromMap(childNode as unknown as Node),\n );\n }\n }\n has(id: number): boolean {\n return this.idNodeMap.has(id);\n }\n\n hasNode(node: Node): boolean {\n return this.nodeMetaMap.has(node);\n }\n\n add(n: Node, meta: serializedNodeWithId) {\n const id = meta.id;\n this.idNodeMap.set(id, n);\n this.nodeMetaMap.set(n, meta);\n }\n\n replace(id: number, n: Node) {\n const oldNode = this.getNode(id);\n if (oldNode) {\n const meta = this.nodeMetaMap.get(oldNode);\n if (meta) this.nodeMetaMap.set(n, meta);\n }\n this.idNodeMap.set(id, n);\n }\n\n reset() {\n this.idNodeMap = new Map();\n this.nodeMetaMap = new WeakMap();\n }\n}\n\nexport function createMirror(): Mirror {\n return new Mirror();\n}\n\nexport function maskInputValue({\n element,\n maskInputOptions,\n tagName,\n type,\n value,\n maskInputFn,\n}: {\n element: HTMLElement;\n maskInputOptions: MaskInputOptions;\n tagName: string;\n type: string | null;\n value: string | null;\n maskInputFn?: MaskInputFn;\n}): string {\n let text = value || '';\n const actualType = type && toLowerCase(type);\n\n if (\n maskInputOptions[tagName.toLowerCase() as keyof MaskInputOptions] ||\n (actualType && maskInputOptions[actualType as keyof MaskInputOptions])\n ) {\n if (maskInputFn) {\n text = maskInputFn(text, element);\n } else {\n text = '*'.repeat(text.length);\n }\n }\n return text;\n}\n\nexport function toLowerCase<T extends string>(str: T): Lowercase<T> {\n return str.toLowerCase() as unknown as Lowercase<T>;\n}\n\nconst ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\ntype PatchedGetImageData = {\n [ORIGINAL_ATTRIBUTE_NAME]: CanvasImageData['getImageData'];\n} & CanvasImageData['getImageData'];\n\nexport function is2DCanvasBlank(canvas: HTMLCanvasElement): boolean {\n const ctx = canvas.getContext('2d');\n if (!ctx) return true;\n\n const chunkSize = 50;\n\n // get chunks of the canvas and check if it is blank\n for (let x = 0; x < canvas.width; x += chunkSize) {\n for (let y = 0; y < canvas.height; y += chunkSize) {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n const getImageData = ctx.getImageData as PatchedGetImageData;\n const originalGetImageData =\n ORIGINAL_ATTRIBUTE_NAME in getImageData\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\n : getImageData;\n // by getting the canvas in chunks we avoid an expensive\n // `getImageData` call that retrieves everything\n // even if we can already tell from the first chunk(s) that\n // the canvas isn't blank\n const pixelBuffer = new Uint32Array(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access\n originalGetImageData.call(\n ctx,\n x,\n y,\n Math.min(chunkSize, canvas.width - x),\n Math.min(chunkSize, canvas.height - y),\n ).data.buffer,\n );\n if (pixelBuffer.some((pixel) => pixel !== 0)) return false;\n }\n }\n return true;\n}\n\nexport function isNodeMetaEqual(a: serializedNode, b: serializedNode): boolean {\n if (!a || !b || a.type !== b.type) return false;\n if (a.type === NodeType.Document)\n return a.compatMode === (b as documentNode).compatMode;\n else if (a.type === NodeType.DocumentType)\n return (\n a.name === (b as documentTypeNode).name &&\n a.publicId === (b as documentTypeNode).publicId &&\n a.systemId === (b as documentTypeNode).systemId\n );\n else if (\n a.type === NodeType.Comment ||\n a.type === NodeType.Text ||\n a.type === NodeType.CDATA\n )\n return a.textContent === (b as textNode).textContent;\n else if (a.type === NodeType.Element)\n return (\n a.tagName === (b as elementNode).tagName &&\n JSON.stringify(a.attributes) ===\n JSON.stringify((b as elementNode).attributes) &&\n a.isSVG === (b as elementNode).isSVG &&\n a.needBlock === (b as elementNode).needBlock\n );\n return false;\n}\n\n/**\n * Get the type of an input element.\n * This takes care of the case where a password input is changed to a text input.\n * In this case, we continue to consider this of type password, in order to avoid leaking sensitive data\n * where passwords should be masked.\n */\nexport function getInputType(element: HTMLElement): Lowercase<string> | null {\n // when omitting the type of input element(e.g. <input />), the type is treated as text\n const type = (element as HTMLInputElement).type;\n\n return element.hasAttribute('data-rr-is-password')\n ? 'password'\n : type\n ? // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n toLowerCase(type)\n : null;\n}\n\n/**\n * Extracts the file extension from an a path, considering search parameters and fragments.\n * @param path - Path to file\n * @param baseURL - [optional] Base URL of the page, used to resolve relative paths. Defaults to current page URL.\n */\nexport function extractFileExtension(\n path: string,\n baseURL?: string,\n): string | null {\n let url;\n try {\n url = new URL(path, baseURL ?? window.location.href);\n } catch (err) {\n return null;\n }\n const regex = /\\.([0-9a-z]+)(?:$)/i;\n const match = url.pathname.match(regex);\n return match?.[1] ?? null;\n}\n\nfunction extractOrigin(url: string): string {\n let origin = '';\n if (url.indexOf('//') > -1) {\n origin = url.split('/').slice(0, 3).join('/');\n } else {\n origin = url.split('/')[0];\n }\n origin = origin.split('?')[0];\n return origin;\n}\n\nconst URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\nconst URL_PROTOCOL_MATCH = /^(?:[a-z+]+:)?\\/\\//i;\nconst URL_WWW_MATCH = /^www\\..*/i;\nconst DATA_URI = /^(data:)([^,]*),(.*)/i;\nexport function absolutifyURLs(cssText: string | null, href: string): string {\n return (cssText || '').replace(\n URL_IN_CSS_REF,\n (\n origin: string,\n quote1: string,\n path1: string,\n quote2: string,\n path2: string,\n path3: string,\n ) => {\n const filePath = path1 || path2 || path3;\n const maybeQuote = quote1 || quote2 || '';\n if (!filePath) {\n return origin;\n }\n if (URL_PROTOCOL_MATCH.test(filePath) || URL_WWW_MATCH.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (DATA_URI.test(filePath)) {\n return `url(${maybeQuote}${filePath}${maybeQuote})`;\n }\n if (filePath[0] === '/') {\n return `url(${maybeQuote}${\n extractOrigin(href) + filePath\n }${maybeQuote})`;\n }\n const stack = href.split('/');\n const parts = filePath.split('/');\n stack.pop();\n for (const part of parts) {\n if (part === '.') {\n continue;\n } else if (part === '..') {\n stack.pop();\n } else {\n stack.push(part);\n }\n }\n return `url(${maybeQuote}${stack.join('/')}${maybeQuote})`;\n },\n );\n}\n\nconst STRIPED_PLACEHOLDER_SVG =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxkZWZzPgogICAgPHBhdHRlcm4gaWQ9InN0cmlwZXMiIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+CiAgICAgIDxyZWN0IHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgZmlsbD0iYmxhY2siLz4KICAgICAgPHBhdGggZD0iTTggMEgxNkwwIDE2VjhMOCAwWiIgZmlsbD0iIzJEMkQyRCIvPgogICAgICA8cGF0aCBkPSJNMTYgOFYxNkg4TDE2IDhaIiBmaWxsPSIjMkQyRDJEIi8+CiAgICA8L3BhdHRlcm4+CiAgPC9kZWZzPgogIDxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjc3RyaXBlcykiLz4KPC9zdmc+Cg==';\n\nconst MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION = 4096;\n\nexport function recompressBase64Image(\n img: HTMLImageElement,\n dataURL: string,\n type?: string,\n quality?: number,\n): string {\n if (!img.complete || img.naturalWidth === 0) {\n return dataURL;\n }\n\n // don't recompress very large images to avoid performance issues\n if (\n img.naturalWidth > MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION ||\n img.naturalHeight > MAX_IMAGE_DIMENSION_FOR_RECOMPRESSION\n ) {\n return dataURL;\n }\n\n try {\n const canvas = document.createElement('canvas');\n canvas.width = img.naturalWidth;\n canvas.height = img.naturalHeight;\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n return dataURL;\n }\n\n ctx.drawImage(img, 0, 0);\n const recompressed = canvas.toDataURL(type || 'image/webp', quality ?? 0.4);\n\n return recompressed;\n } catch (err) {\n return dataURL;\n }\n}\n\nexport function checkDataURLSize(\n dataURL: string,\n maxLength: number | undefined,\n): string {\n if (!maxLength || dataURL.length <= maxLength) {\n return dataURL;\n }\n\n return STRIPED_PLACEHOLDER_SVG;\n}\n", "export enum NodeType {\n Document,\n DocumentType,\n Element,\n Text,\n CDATA,\n Comment,\n}\n\nexport type documentNode = {\n type: NodeType.Document;\n childNodes: serializedNodeWithId[];\n compatMode?: string;\n};\n\nexport type documentTypeNode = {\n type: NodeType.DocumentType;\n name: string;\n publicId: string;\n systemId: string;\n};\n\nexport type attributes = {\n [key: string]: string | number | true | null;\n};\nexport type legacyAttributes = {\n /**\n * @deprecated old bug in rrweb was causing these to always be set\n * @see https://github.com/rrweb-io/rrweb/pull/651\n */\n selected: false;\n};\n\nexport type elementNode = {\n type: NodeType.Element;\n tagName: string;\n attributes: attributes;\n childNodes: serializedNodeWithId[];\n isSVG?: true;\n needBlock?: boolean;\n // This is a custom element or not.\n isCustom?: true;\n};\n\nexport type textNode = {\n type: NodeType.Text;\n textContent: string;\n isStyle?: true;\n};\n\nexport type cdataNode = {\n type: NodeType.CDATA;\n textContent: '';\n};\n\nexport type commentNode = {\n type: NodeType.Comment;\n textContent: string;\n};\n\nexport type serializedNode = (\n | documentNode\n | documentTypeNode\n | elementNode\n | textNode\n | cdataNode\n | commentNode\n) & {\n rootId?: number;\n isShadowHost?: boolean;\n isShadow?: boolean;\n};\n\nimport type { serializedNodeWithId } from '@posthog/rrweb-types';\n\nexport type serializedElementNodeWithId = Extract<\n serializedNodeWithId,\n Record<'type', NodeType.Element>\n>;\n\nexport type tagMap = {\n [key: string]: string;\n};\n\nexport type DialogAttributes = {\n open: string;\n /**\n * Represents the dialog's open mode.\n * `modal` means the dialog is opened with `showModal()`.\n * `non-modal` means the dialog is opened with `show()` or\n * by adding an `open` attribute.\n */\n rr_open_mode: 'modal' | 'non-modal';\n /**\n * Currently unimplemented, but in future can be used to:\n * Represents the order of which of the dialog was opened.\n * This is useful for replaying the dialog `.showModal()` in the correct order.\n */\n // rr_open_mode_index?: number;\n};\n\nexport interface ICanvas extends HTMLCanvasElement {\n __context: string;\n}\n\nexport type idNodeMap = Map<number, Node>;\n\nexport type nodeMetaMap = WeakMap<Node, serializedNodeWithId>;\n\nexport type MaskInputOptions = Partial<{\n color: boolean;\n date: boolean;\n 'datetime-local': boolean;\n email: boolean;\n month: boolean;\n number: boolean;\n range: boolean;\n search: boolean;\n tel: boolean;\n text: boolean;\n time: boolean;\n url: boolean;\n week: boolean;\n // unify textarea and select element with text input\n textarea: boolean;\n select: boolean;\n password: boolean;\n}>;\n\nexport type SlimDOMOptions = Partial<{\n script: boolean;\n comment: boolean;\n headFavicon: boolean;\n headWhitespace: boolean;\n headMetaDescKeywords: boolean;\n headMetaSocial: boolean;\n headMetaRobots: boolean;\n headMetaHttpEquiv: boolean;\n headMetaAuthorship: boolean;\n headMetaVerification: boolean;\n /**\n * blocks title tag 'animations' which can generate a lot of mutations that aren't usually displayed in replayers\n **/\n headTitleMutations: boolean;\n}>;\n\nexport type MaskTextFn = (text: string, element: HTMLElement | null) => string;\nexport type MaskInputFn = (text: string, element: HTMLElement) => string;\n\nexport type KeepIframeSrcFn = (src: string) => boolean;\n\nexport type BuildCache = {\n stylesWithHoverClass: Map<string, string>;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAoFG,IAACA,aAA4B,kBAAC,cAAc;AAC7C,YAAU,UAAU,UAAU,IAAI,CAAC,IAAI;AACvC,YAAU,UAAU,cAAc,IAAI,CAAC,IAAI;AAC3C,YAAU,UAAU,SAAS,IAAI,CAAC,IAAI;AACtC,YAAU,UAAU,MAAM,IAAI,CAAC,IAAI;AACnC,YAAU,UAAU,OAAO,IAAI,CAAC,IAAI;AACpC,YAAU,UAAU,SAAS,IAAI,CAAC,IAAI;AACtC,SAAO;AACT,GAAGA,cAAY,CAAE,CAAA;AC5FjB,IAAM,oBAAoB;EACxB,MAAM,CAAC,cAAc,cAAc,iBAAiB,aAAa;EACjE,YAAY,CAAC,QAAQ,aAAa;EAClC,SAAS,CAAC,cAAc,iBAAiB,kBAAkB;EAC3D,kBAAkB,CAAA;AACpB;AACA,IAAM,kBAAkB;EACtB,MAAM,CAAC,YAAY,aAAa;EAChC,YAAY,CAAC,cAAc;EAC3B,SAAS,CAAE;EACX,kBAAkB,CAAC,aAAa;AAClC;AACA,IAAM,yBAAyB,CAAE;AACjC,SAAS,gCAAgC,KAAK;AAC5C,MAAI,IAAI;AACR,QAAM,iCAAiC,MAAM,KAAK,cAAc,OAAO,SAAS,WAAW,SAAS,OAAO,SAAS,GAAG,eAAe,OAAO,SAAS,GAAG,KAAK,IAAI,GAAG;AACrK,MAAI,iCAAiC,WAAW,6BAA6B,GAAG;AAC9E,WAAO,WAAW,6BAA6B;EACnD,OAAS;AACL,WAAO;EACX;AACA;AACA,SAAS,sBAAsB,KAAK;AAClC,MAAI,uBAAuB,GAAG;AAC5B,WAAO,uBAAuB,GAAG;AACnC,QAAM,YAAY,gCAAgC,GAAG,KAAK,WAAW,GAAG;AACxE,QAAM,mBAAmB,UAAU;AACnC,QAAM,gBAAgB,OAAO,oBAAoB,kBAAkB,GAAG,IAAI;AAC1E,QAAM,uBAAuB;IAC3B;IACA,cAAc;MACZ,CAAC,aAAa;AACZ,YAAI,IAAI;AACR,eAAO;WACJ,MAAM,KAAK,OAAO,yBAAyB,kBAAkB,QAAQ,MAAM,OAAO,SAAS,GAAG,QAAQ,OAAO,SAAS,GAAG,SAAQ,EAAG,SAAS,eAAe;QAC9J;MACT;IACA;EACG;AACD,QAAM,cAAc,OAAO,kBAAkB,gBAAgB,GAAG,IAAI;AACpE,QAAM,qBAAqB;IACzB,eAAe,YAAY;;MAEzB,CAAC,WAAW;AACV,YAAI;AACJ,eAAO,OAAO,iBAAiB,MAAM,MAAM,gBAAgB,KAAK,iBAAiB,MAAM,MAAM,OAAO,SAAS,GAAG,SAAQ,EAAG,SAAS,eAAe;MAC3J;IACA;EACG;AACD,MAAI,wBAAwB,oBAAoB;AAC9C,2BAAuB,GAAG,IAAI,UAAU;AACxC,WAAO,UAAU;EACrB;AACE,MAAI;AACF,UAAM,WAAW,SAAS,cAAc,QAAQ;AAChD,aAAS,KAAK,YAAY,QAAQ;AAClC,UAAM,MAAM,SAAS;AACrB,QAAI,CAAC,IAAK,QAAO,UAAU;AAC3B,UAAM,kBAAkB,IAAI,GAAG,EAAE;AACjC,aAAS,KAAK,YAAY,QAAQ;AAClC,QAAI,CAAC,gBAAiB,QAAO;AAC7B,WAAO,uBAAuB,GAAG,IAAI;EACzC,SAAU;AACN,WAAO;EACX;AACA;AACA,IAAM,yBAAyB,CAAE;AACjC,SAAS,qBAAqB,KAAK,UAAU,UAAU;AACrD,MAAI;AACJ,QAAM,WAAW,GAAG,GAAG,IAAI,OAAO,QAAQ,CAAC;AAC3C,MAAI,uBAAuB,QAAQ;AACjC,WAAO,uBAAuB,QAAQ,EAAE;MACtC;IACD;AACH,QAAM,qBAAqB,sBAAsB,GAAG;AACpD,QAAM,qBAAqB,KAAK,OAAO;IACrC;IACA;EACJ,MAAQ,OAAO,SAAS,GAAG;AACzB,MAAI,CAAC,kBAAmB,QAAO,SAAS,QAAQ;AAChD,yBAAuB,QAAQ,IAAI;AACnC,SAAO,kBAAkB,KAAK,QAAQ;AACxC;AACA,IAAM,uBAAuB,CAAE;AAC/B,SAAS,mBAAmB,KAAK,UAAU,QAAQ;AACjD,QAAM,WAAW,GAAG,GAAG,IAAI,OAAO,MAAM,CAAC;AACzC,MAAI,qBAAqB,QAAQ;AAC/B,WAAO,qBAAqB,QAAQ,EAAE;MACpC;IACD;AACH,QAAM,qBAAqB,sBAAsB,GAAG;AACpD,QAAM,kBAAkB,mBAAmB,MAAM;AACjD,MAAI,OAAO,oBAAoB,WAAY,QAAO,SAAS,MAAM;AACjE,uBAAqB,QAAQ,IAAI;AACjC,SAAO,gBAAgB,KAAK,QAAQ;AACtC;AACA,SAAS,WAAW,GAAG;AACrB,SAAO,qBAAqB,QAAQ,GAAG,YAAY;AACrD;AACA,SAAS,WAAW,GAAG;AACrB,SAAO,qBAAqB,QAAQ,GAAG,YAAY;AACrD;AACA,SAAS,cAAc,GAAG;AACxB,SAAO,qBAAqB,QAAQ,GAAG,eAAe;AACxD;AACA,SAAS,YAAY,GAAG;AACtB,SAAO,qBAAqB,QAAQ,GAAG,aAAa;AACtD;AACA,SAAS,SAAS,GAAG,OAAO;AAC1B,SAAO,mBAAmB,QAAQ,GAAG,UAAU,EAAE,KAAK;AACxD;AACA,SAAS,YAAY,GAAG;AACtB,SAAO,mBAAmB,QAAQ,GAAG,aAAa,EAAG;AACvD;AACA,SAAS,KAAK,GAAG;AACf,MAAI,CAAC,KAAK,EAAE,UAAU,GAAI,QAAO;AACjC,SAAO,qBAAqB,cAAc,GAAG,MAAM;AACrD;AACA,SAAS,YAAY,GAAG;AACtB,SAAO,EAAE;AACX;AACA,SAAS,WAAW,GAAG;AACrB,MAAI,CAAC,KAAK,EAAE,gBAAgB,GAAI,QAAO;AACvC,SAAO,qBAAqB,WAAW,GAAG,YAAY;AACxD;AACA,SAAS,cAAc,GAAG,WAAW;AACnC,SAAO,qBAAqB,WAAW,GAAG,eAAe,EAAE,SAAS;AACtE;AACA,SAAS,iBAAiB,GAAG,WAAW;AACtC,SAAO,qBAAqB,WAAW,GAAG,kBAAkB,EAAE,SAAS;AACzE;AACA,SAAS,uBAAuB;AAC9B,SAAO,sBAAsB,kBAAkB,EAAE;AACnD;AACA,SAAS,MAAM,QAAQ,MAAM,aAAa;AACxC,MAAI;AACF,QAAI,EAAE,QAAQ,SAAS;AACrB,aAAO,MAAM;MACZ;IACP;AACI,UAAM,WAAW,OAAO,IAAI;AAC5B,UAAM,UAAU,YAAY,QAAQ;AACpC,QAAI,OAAO,YAAY,YAAY;AACjC,cAAQ,YAAY,QAAQ,aAAa,CAAE;AAC3C,aAAO,iBAAiB,SAAS;QAC/B,oBAAoB;UAClB,YAAY;UACZ,OAAO;QACjB;MACA,CAAO;IACP;AACI,WAAO,IAAI,IAAI;AACf,WAAO,MAAM;AACX,aAAO,IAAI,IAAI;IAChB;EACL,SAAU;AACN,WAAO,MAAM;IACZ;EACL;AACA;AACK,IAAC,QAAQ;EACZ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBAAkB;EAClB;AACF;AC3JO,SAAS,UAAU,GAAuB;AACxC,SAAA,EAAE,aAAa,EAAE;AAC1B;AAEO,SAAS,aAAa,GAA0B;AAC/C,QAAA;;;IAGH,KAAK,UAAU,KAAK,UAAU,KAAKC,MAAI,KAAK,CAAe,KAAM;;AAC7D,SAAA;IACL,UAAU,gBAAgB,UAAUA,MAAI,WAAW,MAAM,MAAM;EACjE;AACF;AAMO,SAAS,kBAAkBC,aAAiC;AACjE,SAAO,OAAO,UAAU,SAAS,KAAKA,WAAU,MAAM;AACxD;AAQA,SAAS,mCAAmC,SAAyB;AAOjE,MAAA,QAAQ,SAAS,yBAAyB,KAC1C,CAAC,QAAQ,SAAS,iCAAiC,GACnD;AACA,cAAU,QAAQ;MAChB;MACA;IACF;EAAA;AAEK,SAAA;AACT;AAsBO,SAAS,sBAAsB,MAA6B;AAC3D,QAAA,EAAE,QAAA,IAAY;AACpB,MAAI,QAAQ,MAAM,GAAG,EAAE,SAAS,EAAU,QAAA;AAEpC,QAAA,YAAY,CAAC,WAAW,OAAO,KAAK,UAAU,KAAK,IAAI,CAAC,GAAG;AAC7D,MAAA,KAAK,cAAc,IAAI;AACzB,cAAU,KAAK,OAAO;EAAA,WACb,KAAK,WAAW;AACzB,cAAU,KAAK,SAAS,KAAK,SAAS,GAAG;EAAA;AAE3C,MAAI,KAAK,cAAc;AACrB,cAAU,KAAK,YAAY,KAAK,YAAY,GAAG;EAAA;AAE7C,MAAA,KAAK,MAAM,QAAQ;AACX,cAAA,KAAK,KAAK,MAAM,SAAS;EAAA;AAE9B,SAAA,UAAU,KAAK,GAAG,IAAI;AAC/B;AAEO,SAAS,oBAAoB,GAAiC;AAC/D,MAAA;AACI,UAAA,QAAQ,EAAE,SAAS,EAAE;AAC3B,QAAI,CAAC,OAAO;AACH,aAAA;IAAA;AAET,QAAI,YAAY,EAAE;AACd,QAAA,CAAC,aAAa,EAAE,WAAW;AAE7B,kBAAY,EAAE,UAAU;IAAA;AAE1B,UAAM,mBAAmB,MAAM;MAAK;MAAO,CAAC,SAC1C,cAAc,MAAM,SAAS;IAAA,EAC7B,KAAK,EAAE;AACT,WAAO,mCAAmC,gBAAgB;EAAA,SACnD,OAAO;AACP,WAAA;EAAA;AAEX;AAEgB,SAAA,cAAc,MAAe,WAAkC;;AACzE,MAAA,gBAAgB,IAAI,GAAG;AACrB,QAAA;AACA,QAAA;AACF;;MAGE,oBAAoB,KAAK,UAAU;MAEnC,sBAAsB,IAAI;IAAA,SACrB,OAAO;AACd,0BAAoB,KAAK;IAAA;AAMvB,QAAA;AACE,UAAA,uBAAqB,KAAA,KAAK,eAAL,OAAA,SAAA,GAAiB,OAAM;AAE9C,eAAO,eAAe,mBAAmB,KAAK,WAAW,IAAI;MAAA;IAC/D,SACM;IAAA;AAGD,WAAA;EAAA,OACF;AACL,QAAI,kBAAkB,KAAK;AAC3B,QAAI,eAAe,IAAI,KAAK,KAAK,aAAa,SAAS,GAAG,GAAG;AAG3D,wBAAkB,gBAAgB,eAAe;IAAA;AAEnD,QAAI,WAAW;AACN,aAAA,eAAe,iBAAiB,SAAS;IAAA;AAE3C,WAAA;EAAA;AAEX;AAEO,SAAS,gBAAgB,gBAAgC;AAE9D,QAAM,QAAQ;AACP,SAAA,eAAe,QAAQ,OAAO,QAAQ;AAC/C;AAEO,SAAS,gBAAgB,MAAsC;AACpE,SAAO,gBAAgB;AACzB;AAEO,SAAS,eAAe,MAAqC;AAClE,SAAO,kBAAkB;AAC3B;AAEO,IAAM,SAAN,MAAsC;EAAtC,cAAA;AACG,kBAAA,MAAA,aAAA,oBAA2B,IAAI,CAAA;AAC/B,kBAAA,MAAA,eAAA,oBAA+B,QAAQ,CAAA;EAAA;EAE/C,MAAM,GAAoC;;AACpC,QAAA,CAAC,EAAU,QAAA;AAEf,UAAM,MAAK,KAAA,KAAK,QAAQ,CAAC,MAAd,OAAA,SAAA,GAAiB;AAG5B,WAAO,kBAAM;EAAA;EAGf,QAAQ,IAAyB;AAC/B,WAAO,KAAK,UAAU,IAAI,EAAE,KAAK;EAAA;EAGnC,SAAmB;AACjB,WAAO,MAAM,KAAK,KAAK,UAAU,KAAA,CAAM;EAAA;EAGzC,QAAQ,GAAsC;AAC5C,WAAO,KAAK,YAAY,IAAI,CAAC,KAAK;EAAA;;;EAKpC,kBAAkB,GAAS;AACnB,UAAA,KAAK,KAAK,MAAM,CAAC;AAClB,SAAA,UAAU,OAAO,EAAE;AAExB,QAAI,EAAE,YAAY;AAChB,QAAE,WAAW;QAAQ,CAAC,cACpB,KAAK,kBAAkB,SAA4B;MACrD;IAAA;EACF;EAEF,IAAI,IAAqB;AAChB,WAAA,KAAK,UAAU,IAAI,EAAE;EAAA;EAG9B,QAAQ,MAAqB;AACpB,WAAA,KAAK,YAAY,IAAI,IAAI;EAAA;EAGlC,IAAI,GAAS,MAA4B;AACvC,UAAM,KAAK,KAAK;AACX,SAAA,UAAU,IAAI,IAAI,CAAC;AACnB,SAAA,YAAY,IAAI,GAAG,IAAI;EAAA;EAG9B,QAAQ,IAAY,GAAS;AACrB,UAAA,UAAU,KAAK,QAAQ,EAAE;AAC/B,QAAI,SAAS;AACX,YAAM,OAAO,KAAK,YAAY,IAAI,OAAO;AACzC,UAAI,KAAM,MAAK,YAAY,IAAI,GAAG,IAAI;IAAA;AAEnC,SAAA,UAAU,IAAI,IAAI,CAAC;EAAA;EAG1B,QAAQ;AACD,SAAA,YAAA,oBAAgB,IAAI;AACpB,SAAA,cAAA,oBAAkB,QAAQ;EAAA;AAEnC;AAEO,SAAS,eAAuB;AACrC,SAAO,IAAI,OAAO;AACpB;AAEO,SAAS,eAAe;EAC7B;EACA;EACA;EACA;EACA;EACA;AACF,GAOW;AACT,MAAI,OAAO,SAAS;AACd,QAAA,aAAa,QAAQ,YAAY,IAAI;AAGzC,MAAA,iBAAiB,QAAQ,YAAY,CAA2B,KAC/D,cAAc,iBAAiB,UAAoC,GACpE;AACA,QAAI,aAAa;AACR,aAAA,YAAY,MAAM,OAAO;IAAA,OAC3B;AACE,aAAA,IAAI,OAAO,KAAK,MAAM;IAAA;EAC/B;AAEK,SAAA;AACT;AAEO,SAAS,YAA8B,KAAsB;AAClE,SAAO,IAAI,YAAY;AACzB;AAEA,IAAM,0BAA0B;AAKzB,SAAS,gBAAgB,QAAoC;AAC5D,QAAA,MAAM,OAAO,WAAW,IAAI;AAC9B,MAAA,CAAC,IAAY,QAAA;AAEjB,QAAM,YAAY;AAGlB,WAAS,IAAI,GAAG,IAAI,OAAO,OAAO,KAAK,WAAW;AAChD,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW;AAEjD,YAAM,eAAe,IAAI;AACzB,YAAM,uBACJ,2BAA2B,eACvB,aAAa,uBAAuB,IACpC;AAKN,YAAM,cAAc,IAAI;;QAEtB,qBAAqB;UACnB;UACA;UACA;UACA,KAAK,IAAI,WAAW,OAAO,QAAQ,CAAC;UACpC,KAAK,IAAI,WAAW,OAAO,SAAS,CAAC;QAAA,EACrC,KAAK;MACT;AACA,UAAI,YAAY,KAAK,CAAC,UAAU,UAAU,CAAC,EAAU,QAAA;IAAA;EACvD;AAEK,SAAA;AACT;AAEgB,SAAA,gBAAgB,GAAmB,GAA4B;AACzE,MAAA,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,KAAa,QAAA;AACtC,MAAA,EAAE,SAASF,WAAS;AACf,WAAA,EAAE,eAAgB,EAAmB;WACrC,EAAE,SAASA,WAAS;AAEzB,WAAA,EAAE,SAAU,EAAuB,QACnC,EAAE,aAAc,EAAuB,YACvC,EAAE,aAAc,EAAuB;WAGzC,EAAE,SAASA,WAAS,WACpB,EAAE,SAASA,WAAS,QACpB,EAAE,SAASA,WAAS;AAEb,WAAA,EAAE,gBAAiB,EAAe;WAClC,EAAE,SAASA,WAAS;AAEzB,WAAA,EAAE,YAAa,EAAkB,WACjC,KAAK,UAAU,EAAE,UAAU,MACzB,KAAK,UAAW,EAAkB,UAAU,KAC9C,EAAE,UAAW,EAAkB,SAC/B,EAAE,cAAe,EAAkB;AAEhC,SAAA;AACT;AAQO,SAAS,aAAa,SAAgD;AAE3E,QAAM,OAAQ,QAA6B;AAE3C,SAAO,QAAQ,aAAa,qBAAqB,IAC7C,aACA;;IAEA,YAAY,IAAI;MAChB;AACN;AAOgB,SAAA,qBACd,MACA,SACe;;AACX,MAAA;AACA,MAAA;AACF,UAAM,IAAI,IAAI,MAAM,4BAAW,OAAO,SAAS,IAAI;EAAA,SAC5C,KAAK;AACL,WAAA;EAAA;AAET,QAAM,QAAQ;AACd,QAAM,QAAQ,IAAI,SAAS,MAAM,KAAK;AAC/B,UAAA,cAAA,OAAA,SAAA,MAAQ,CAAA,MAAR,YAAc;AACvB;AAEA,SAAS,cAAc,KAAqB;AAC1C,MAAI,SAAS;AACb,MAAI,IAAI,QAAQ,IAAI,IAAI,IAAI;AACjB,aAAA,IAAI,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;EAAA,OACvC;AACL,aAAS,IAAI,MAAM,GAAG,EAAE,CAAC;EAAA;AAE3B,WAAS,OAAO,MAAM,GAAG,EAAE,CAAC;AACrB,SAAA;AACT;AAEA,IAAM,iBAAiB;AACvB,IAAM,qBAAqB;AAC3B,IAAM,gBAAgB;AACtB,IAAM,WAAW;AACD,SAAA,eAAe,SAAwB,MAAsB;AAC3E,UAAQ,WAAW,IAAI;IACrB;IACA,CACE,QACA,QACA,OACA,QACA,OACA,UACG;AACG,YAAA,WAAW,SAAS,SAAS;AAC7B,YAAA,aAAa,UAAU,UAAU;AACvC,UAAI,CAAC,UAAU;AACN,eAAA;MAAA;AAET,UAAI,mBAAmB,KAAK,QAAQ,KAAK,cAAc,KAAK,QAAQ,GAAG;AACrE,eAAO,OAAO,UAAU,GAAG,QAAQ,GAAG,UAAU;MAAA;AAE9C,UAAA,SAAS,KAAK,QAAQ,GAAG;AAC3B,eAAO,OAAO,UAAU,GAAG,QAAQ,GAAG,UAAU;MAAA;AAE9C,UAAA,SAAS,CAAC,MAAM,KAAK;AAChB,eAAA,OAAO,UAAU,GACtB,cAAc,IAAI,IAAI,QACxB,GAAG,UAAU;MAAA;AAET,YAAA,QAAQ,KAAK,MAAM,GAAG;AACtB,YAAA,QAAQ,SAAS,MAAM,GAAG;AAChC,YAAM,IAAI;AACV,iBAAW,QAAQ,OAAO;AACxB,YAAI,SAAS,KAAK;AAChB;QAAA,WACS,SAAS,MAAM;AACxB,gBAAM,IAAI;QAAA,OACL;AACL,gBAAM,KAAK,IAAI;QAAA;MACjB;AAEK,aAAA,OAAO,UAAU,GAAG,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU;IAAA;EAE3D;AACF;AAEA,IAAM,0BACJ;AAEF,IAAM,wCAAwC;AAEvC,SAAS,sBACd,KACA,SACA,MACA,SACQ;AACR,MAAI,CAAC,IAAI,YAAY,IAAI,iBAAiB,GAAG;AACpC,WAAA;EAAA;AAIT,MACE,IAAI,eAAe,yCACnB,IAAI,gBAAgB,uCACpB;AACO,WAAA;EAAA;AAGL,MAAA;AACI,UAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,WAAO,QAAQ,IAAI;AACnB,WAAO,SAAS,IAAI;AACd,UAAA,MAAM,OAAO,WAAW,IAAI;AAElC,QAAI,CAAC,KAAK;AACD,aAAA;IAAA;AAGL,QAAA,UAAU,KAAK,GAAG,CAAC;AACvB,UAAM,eAAe,OAAO,UAAU,QAAQ,cAAc,4BAAW,GAAG;AAEnE,WAAA;EAAA,SACA,KAAK;AACL,WAAA;EAAA;AAEX;AAEgB,SAAA,iBACd,SACA,WACQ;AACR,MAAI,CAAC,aAAa,QAAQ,UAAU,WAAW;AACtC,WAAA;EAAA;AAGF,SAAA;AACT;AClfY,IAAA,WAAA,kBAAAA,cAAL;AACLA,YAAA,UAAA,UAAA,IAAA,CAAA,IAAA;AACAA,YAAA,UAAA,cAAA,IAAA,CAAA,IAAA;AACAA,YAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AACAA,YAAA,UAAA,MAAA,IAAA,CAAA,IAAA;AACAA,YAAA,UAAA,OAAA,IAAA,CAAA,IAAA;AACAA,YAAA,UAAA,SAAA,IAAA,CAAA,IAAA;AANUA,SAAAA;AAAA,GAAA,YAAA,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;",
|
|
6
|
+
"names": ["NodeType", "dom", "shadowRoot"]
|
|
7
|
+
}
|