@posthog/rrweb-snapshot 0.0.28 → 0.0.29
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/rrweb-snapshot.cjs +110 -110
- package/dist/rrweb-snapshot.cjs.map +1 -1
- package/dist/rrweb-snapshot.js +110 -110
- package/dist/rrweb-snapshot.js.map +1 -1
- package/dist/rrweb-snapshot.umd.cjs +110 -110
- package/dist/rrweb-snapshot.umd.cjs.map +4 -4
- package/dist/rrweb-snapshot.umd.min.cjs +9 -9
- package/dist/rrweb-snapshot.umd.min.cjs.map +4 -4
- package/package.json +1 -1
package/dist/rrweb-snapshot.cjs
CHANGED
|
@@ -203,6 +203,91 @@ function isShadowRoot(n) {
|
|
|
203
203
|
function isNativeShadowDom(shadowRoot2) {
|
|
204
204
|
return Object.prototype.toString.call(shadowRoot2) === "[object ShadowRoot]";
|
|
205
205
|
}
|
|
206
|
+
function fixBrowserCompatibilityIssuesInCSS(cssText) {
|
|
207
|
+
if (cssText.includes(" background-clip: text;") && !cssText.includes(" -webkit-background-clip: text;")) {
|
|
208
|
+
cssText = cssText.replace(
|
|
209
|
+
/\sbackground-clip:\s*text;/g,
|
|
210
|
+
" -webkit-background-clip: text; background-clip: text;"
|
|
211
|
+
);
|
|
212
|
+
}
|
|
213
|
+
return cssText;
|
|
214
|
+
}
|
|
215
|
+
function escapeImportStatement(rule2) {
|
|
216
|
+
const { cssText } = rule2;
|
|
217
|
+
if (cssText.split('"').length < 3) return cssText;
|
|
218
|
+
const statement = ["@import", `url(${JSON.stringify(rule2.href)})`];
|
|
219
|
+
if (rule2.layerName === "") {
|
|
220
|
+
statement.push(`layer`);
|
|
221
|
+
} else if (rule2.layerName) {
|
|
222
|
+
statement.push(`layer(${rule2.layerName})`);
|
|
223
|
+
}
|
|
224
|
+
if (rule2.supportsText) {
|
|
225
|
+
statement.push(`supports(${rule2.supportsText})`);
|
|
226
|
+
}
|
|
227
|
+
if (rule2.media.length) {
|
|
228
|
+
statement.push(rule2.media.mediaText);
|
|
229
|
+
}
|
|
230
|
+
return statement.join(" ") + ";";
|
|
231
|
+
}
|
|
232
|
+
function stringifyStylesheet(s) {
|
|
233
|
+
try {
|
|
234
|
+
const rules = s.rules || s.cssRules;
|
|
235
|
+
if (!rules) {
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
let sheetHref = s.href;
|
|
239
|
+
if (!sheetHref && s.ownerNode) {
|
|
240
|
+
sheetHref = s.ownerNode.baseURI;
|
|
241
|
+
}
|
|
242
|
+
const stringifiedRules = Array.from(
|
|
243
|
+
rules,
|
|
244
|
+
(rule2) => stringifyRule(rule2, sheetHref)
|
|
245
|
+
).join("");
|
|
246
|
+
return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);
|
|
247
|
+
} catch (error) {
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function stringifyRule(rule2, sheetHref) {
|
|
252
|
+
var _a;
|
|
253
|
+
if (isCSSImportRule(rule2)) {
|
|
254
|
+
let importStringified;
|
|
255
|
+
try {
|
|
256
|
+
importStringified = // for same-origin stylesheets,
|
|
257
|
+
// we can access the imported stylesheet rules directly
|
|
258
|
+
stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement
|
|
259
|
+
escapeImportStatement(rule2);
|
|
260
|
+
} catch (error) {
|
|
261
|
+
importStringified = rule2.cssText;
|
|
262
|
+
}
|
|
263
|
+
try {
|
|
264
|
+
if (importStringified && ((_a = rule2.styleSheet) == null ? void 0 : _a.href)) {
|
|
265
|
+
return absolutifyURLs(importStringified, rule2.styleSheet.href);
|
|
266
|
+
}
|
|
267
|
+
} catch {
|
|
268
|
+
}
|
|
269
|
+
return importStringified;
|
|
270
|
+
} else {
|
|
271
|
+
let ruleStringified = rule2.cssText;
|
|
272
|
+
if (isCSSStyleRule(rule2) && rule2.selectorText.includes(":")) {
|
|
273
|
+
ruleStringified = fixSafariColons(ruleStringified);
|
|
274
|
+
}
|
|
275
|
+
if (sheetHref) {
|
|
276
|
+
return absolutifyURLs(ruleStringified, sheetHref);
|
|
277
|
+
}
|
|
278
|
+
return ruleStringified;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
function fixSafariColons(cssStringified) {
|
|
282
|
+
const regex = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;
|
|
283
|
+
return cssStringified.replace(regex, "$1\\$2");
|
|
284
|
+
}
|
|
285
|
+
function isCSSImportRule(rule2) {
|
|
286
|
+
return "styleSheet" in rule2;
|
|
287
|
+
}
|
|
288
|
+
function isCSSStyleRule(rule2) {
|
|
289
|
+
return "selectorText" in rule2;
|
|
290
|
+
}
|
|
206
291
|
class Mirror {
|
|
207
292
|
constructor() {
|
|
208
293
|
__publicField(this, "idNodeMap", /* @__PURE__ */ new Map());
|
|
@@ -337,91 +422,6 @@ function extractFileExtension(path, baseURL) {
|
|
|
337
422
|
const match = url.pathname.match(regex);
|
|
338
423
|
return (match == null ? void 0 : match[1]) ?? null;
|
|
339
424
|
}
|
|
340
|
-
function fixBrowserCompatibilityIssuesInCSS(cssText) {
|
|
341
|
-
if (cssText.includes(" background-clip: text;") && !cssText.includes(" -webkit-background-clip: text;")) {
|
|
342
|
-
cssText = cssText.replace(
|
|
343
|
-
/\sbackground-clip:\s*text;/g,
|
|
344
|
-
" -webkit-background-clip: text; background-clip: text;"
|
|
345
|
-
);
|
|
346
|
-
}
|
|
347
|
-
return cssText;
|
|
348
|
-
}
|
|
349
|
-
function escapeImportStatement(rule2) {
|
|
350
|
-
const { cssText } = rule2;
|
|
351
|
-
if (cssText.split('"').length < 3) return cssText;
|
|
352
|
-
const statement = ["@import", `url(${JSON.stringify(rule2.href)})`];
|
|
353
|
-
if (rule2.layerName === "") {
|
|
354
|
-
statement.push(`layer`);
|
|
355
|
-
} else if (rule2.layerName) {
|
|
356
|
-
statement.push(`layer(${rule2.layerName})`);
|
|
357
|
-
}
|
|
358
|
-
if (rule2.supportsText) {
|
|
359
|
-
statement.push(`supports(${rule2.supportsText})`);
|
|
360
|
-
}
|
|
361
|
-
if (rule2.media.length) {
|
|
362
|
-
statement.push(rule2.media.mediaText);
|
|
363
|
-
}
|
|
364
|
-
return statement.join(" ") + ";";
|
|
365
|
-
}
|
|
366
|
-
function stringifyStylesheet(s) {
|
|
367
|
-
try {
|
|
368
|
-
const rules = s.rules || s.cssRules;
|
|
369
|
-
if (!rules) {
|
|
370
|
-
return null;
|
|
371
|
-
}
|
|
372
|
-
let sheetHref = s.href;
|
|
373
|
-
if (!sheetHref && s.ownerNode) {
|
|
374
|
-
sheetHref = s.ownerNode.baseURI;
|
|
375
|
-
}
|
|
376
|
-
const stringifiedRules = Array.from(
|
|
377
|
-
rules,
|
|
378
|
-
(rule2) => stringifyRule(rule2, sheetHref)
|
|
379
|
-
).join("");
|
|
380
|
-
return fixBrowserCompatibilityIssuesInCSS(stringifiedRules);
|
|
381
|
-
} catch (error) {
|
|
382
|
-
return null;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
function stringifyRule(rule2, sheetHref) {
|
|
386
|
-
var _a;
|
|
387
|
-
if (isCSSImportRule(rule2)) {
|
|
388
|
-
let importStringified;
|
|
389
|
-
try {
|
|
390
|
-
importStringified = // for same-origin stylesheets,
|
|
391
|
-
// we can access the imported stylesheet rules directly
|
|
392
|
-
stringifyStylesheet(rule2.styleSheet) || // work around browser issues with the raw string `@import url(...)` statement
|
|
393
|
-
escapeImportStatement(rule2);
|
|
394
|
-
} catch (error) {
|
|
395
|
-
importStringified = rule2.cssText;
|
|
396
|
-
}
|
|
397
|
-
try {
|
|
398
|
-
if (importStringified && ((_a = rule2.styleSheet) == null ? void 0 : _a.href)) {
|
|
399
|
-
return absolutifyURLs(importStringified, rule2.styleSheet.href);
|
|
400
|
-
}
|
|
401
|
-
} catch {
|
|
402
|
-
}
|
|
403
|
-
return importStringified;
|
|
404
|
-
} else {
|
|
405
|
-
let ruleStringified = rule2.cssText;
|
|
406
|
-
if (isCSSStyleRule(rule2) && rule2.selectorText.includes(":")) {
|
|
407
|
-
ruleStringified = fixSafariColons(ruleStringified);
|
|
408
|
-
}
|
|
409
|
-
if (sheetHref) {
|
|
410
|
-
return absolutifyURLs(ruleStringified, sheetHref);
|
|
411
|
-
}
|
|
412
|
-
return ruleStringified;
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
function fixSafariColons(cssStringified) {
|
|
416
|
-
const regex = /(\[(?:[\w-]+)[^\\])(:(?:[\w-]+)\])/gm;
|
|
417
|
-
return cssStringified.replace(regex, "$1\\$2");
|
|
418
|
-
}
|
|
419
|
-
function isCSSImportRule(rule2) {
|
|
420
|
-
return "styleSheet" in rule2;
|
|
421
|
-
}
|
|
422
|
-
function isCSSStyleRule(rule2) {
|
|
423
|
-
return "selectorText" in rule2;
|
|
424
|
-
}
|
|
425
425
|
function extractOrigin(url) {
|
|
426
426
|
let origin = "";
|
|
427
427
|
if (url.indexOf("//") > -1) {
|
|
@@ -1393,15 +1393,6 @@ function visitSnapshot(node2, onVisit) {
|
|
|
1393
1393
|
function cleanupSnapshot() {
|
|
1394
1394
|
_id = 1;
|
|
1395
1395
|
}
|
|
1396
|
-
var NodeType = /* @__PURE__ */ ((NodeType2) => {
|
|
1397
|
-
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
1398
|
-
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
1399
|
-
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
1400
|
-
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
1401
|
-
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
1402
|
-
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
1403
|
-
return NodeType2;
|
|
1404
|
-
})(NodeType || {});
|
|
1405
1396
|
const MEDIA_SELECTOR = /(max|min)-device-(width|height)/;
|
|
1406
1397
|
const MEDIA_SELECTOR_GLOBAL = new RegExp(MEDIA_SELECTOR.source, "g");
|
|
1407
1398
|
const mediaSelectorPlugin = {
|
|
@@ -5323,6 +5314,15 @@ function requireSafeParse() {
|
|
|
5323
5314
|
}
|
|
5324
5315
|
var safeParseExports = requireSafeParse();
|
|
5325
5316
|
const safeParser = /* @__PURE__ */ getDefaultExportFromCjs(safeParseExports);
|
|
5317
|
+
var NodeType = /* @__PURE__ */ ((NodeType2) => {
|
|
5318
|
+
NodeType2[NodeType2["Document"] = 0] = "Document";
|
|
5319
|
+
NodeType2[NodeType2["DocumentType"] = 1] = "DocumentType";
|
|
5320
|
+
NodeType2[NodeType2["Element"] = 2] = "Element";
|
|
5321
|
+
NodeType2[NodeType2["Text"] = 3] = "Text";
|
|
5322
|
+
NodeType2[NodeType2["CDATA"] = 4] = "CDATA";
|
|
5323
|
+
NodeType2[NodeType2["Comment"] = 5] = "Comment";
|
|
5324
|
+
return NodeType2;
|
|
5325
|
+
})(NodeType || {});
|
|
5326
5326
|
var postcssExports = requirePostcss();
|
|
5327
5327
|
const postcss = /* @__PURE__ */ getDefaultExportFromCjs(postcssExports);
|
|
5328
5328
|
postcss.stringify;
|
|
@@ -5349,22 +5349,6 @@ postcss.Input;
|
|
|
5349
5349
|
postcss.Rule;
|
|
5350
5350
|
postcss.Root;
|
|
5351
5351
|
postcss.Node;
|
|
5352
|
-
function adaptCssForReplay(cssText, cache) {
|
|
5353
|
-
const cachedStyle = cache == null ? void 0 : cache.stylesWithHoverClass.get(cssText);
|
|
5354
|
-
if (cachedStyle) return cachedStyle;
|
|
5355
|
-
let result2 = cssText;
|
|
5356
|
-
try {
|
|
5357
|
-
const ast = postcss([
|
|
5358
|
-
mediaSelectorPlugin,
|
|
5359
|
-
pseudoClassPlugin
|
|
5360
|
-
]).process(cssText, { parser: safeParser });
|
|
5361
|
-
result2 = ast.css;
|
|
5362
|
-
} catch (error) {
|
|
5363
|
-
console.warn("Failed to adapt css for replay", error);
|
|
5364
|
-
}
|
|
5365
|
-
cache == null ? void 0 : cache.stylesWithHoverClass.set(cssText, result2);
|
|
5366
|
-
return result2;
|
|
5367
|
-
}
|
|
5368
5352
|
const tagMap = {
|
|
5369
5353
|
script: "noscript",
|
|
5370
5354
|
// camel case svg element tag names
|
|
@@ -5412,6 +5396,22 @@ function getTagName(n) {
|
|
|
5412
5396
|
}
|
|
5413
5397
|
return tagName;
|
|
5414
5398
|
}
|
|
5399
|
+
function adaptCssForReplay(cssText, cache) {
|
|
5400
|
+
const cachedStyle = cache == null ? void 0 : cache.stylesWithHoverClass.get(cssText);
|
|
5401
|
+
if (cachedStyle) return cachedStyle;
|
|
5402
|
+
let result2 = cssText;
|
|
5403
|
+
try {
|
|
5404
|
+
const ast = postcss([
|
|
5405
|
+
mediaSelectorPlugin,
|
|
5406
|
+
pseudoClassPlugin
|
|
5407
|
+
]).process(cssText, { parser: safeParser });
|
|
5408
|
+
result2 = ast.css;
|
|
5409
|
+
} catch (error) {
|
|
5410
|
+
console.warn("Failed to adapt css for replay", error);
|
|
5411
|
+
}
|
|
5412
|
+
cache == null ? void 0 : cache.stylesWithHoverClass.set(cssText, result2);
|
|
5413
|
+
return result2;
|
|
5414
|
+
}
|
|
5415
5415
|
function createCache() {
|
|
5416
5416
|
const stylesWithHoverClass = /* @__PURE__ */ new Map();
|
|
5417
5417
|
return {
|