Major Changes
-
#1497
2606a2aThanks @Juice10! - Distributed files have new filenames, paths and extensions. Important: If you reference distributed files or types directly, you might have to update your paths/filenames. E.g. you import fromrrweb/typings/...orrrdom/es. However you runimport rrweb from 'rrweb'you won't notice a difference with this change. If you include rrweb files directly in a script tag, you might have to update that path to include a the.umd.cjsfiles instead. All.jsfiles now use ES modules which can be used in modern browsers, node.js and bundlers that support ES modules. All npm packages now also ship.cjsand.umd.cjsfiles. The.umd.cjsfiles are CommonJS modules that bundle all files together to make it easy to ship one file to browser environments (similar to the previous.jsfiles). The.cjsfiles are CommonJS modules that can be used in older Node.js environments. Types should be better defined inpackage.jsonand if you need specific types they might be exported from new packages (for examplePlayerMachineStateandSpeedMachineStateare now exported from@rrweb/replay). Check thepackage.json'smainandexportsfield for the available files. -
#1834
43e4f5bThanks @Juice10! - Require browserrebuild()calls to target a document created byrebuildIntoSandboxedIframe()orcreateSandboxedIframe()by default. Use these helpers for untrusted replay data, or passUNSAFE_allowUnprotectedRebuild: trueonly when accepting the script-execution risk.rrwebnow marksUNSAFE_replayCanvasrebuilds as an explicit unsafe path because canvas replay adds script permission to the replay iframe. -
#1593
5a78938Thanks @daibhin! -NodeTypeenum was moved from rrweb-snapshot to @rrweb/types
The following types where moved from rrweb-snapshot to @rrweb/types:documentNode,documentTypeNode,legacyAttributes,textNode,cdataNode,commentNode,elementNode,serializedNode,serializedNodeWithId,serializedElementNodeWithId,serializedTextNodeWithId,IMirror,INode,mediaAttributes,attributesandDataURLOptions -
#868
e4f680eThanks @Juice10! - RemoveINode/node.__snusage and useMirroras the source of truth.
Minor Changes
-
#1432
123a81eThanks @Juice10! - Video and Audio elements now also captureplaybackRate,muted,loop,volume. -
#1503
335639aThanks @Juice10! - Record dialog's modal status for replay in rrweb. (Currently triggeringdialog.showModal()is not supported in rrweb-snapshot's rebuild) -
#1188
bc84246Thanks @benjackwhite! - feat: Extends maskInputFn to pass the HTMLElement to the deciding function -
#1170
d2582e9Thanks @mydea! - feat: Ensure password inputs remain masked when switching input type -
#1152
eac9b18Thanks @mydea! - feat: Ignoreautoplayattribute on video/audio elements -
#1310
7c0dc9dThanks @benjackwhite! - Extends maskTextFn to pass the HTMLElement to the deciding function -
#1035
2a80949Thanks @Juice10! - Add support for cross-origin iframe recording, including event/id remapping andgenIdexport support. -
#989
3809060Thanks @YunFeng0817! - Add support for recording and replaying constructableadoptedStyleSheets, including stylesheet mutations,replace/replaceSync, shadow roots, iframes, live mode, and virtual DOM replay. -
#895
de755aeThanks @Juice10! - Add the fast-forward virtual DOM optimization for replay.
Patch Changes
-
#1580
47a7c3fThanks @guntherjh! - Handle exceptions thrown from postcss when calling adaptCssForReplay -
#1386
a2c8a1aThanks @ababik! - Fix that the optionalmaskInputFnwas being accidentally ignored during the creation of the full snapshot -
#1417
40bbc25Thanks @YunFeng0817! - fix: duplicate textContent for style elements cause incremental style mutations to be invalid -
#1762
22bc4c3Thanks @Juice10! - Drop base64 inlined worker source from all bundles -
#1279
11f6567Thanks @eoghanmurray! - Extend to run fixBrowserCompatibilityIssuesInCSS over inline stylesheets -
#1615
dc20cd4Thanks @eoghanmurray! - Improve performance of splitCssText for <style> elements with large css content - see #1603 -
#1640
3e9e42fThanks @eoghanmurray! - Improve performance of splitCssText for <style> elements with large css content - see #1603 -
#1464
03b5216Thanks @colingm! - better support for coexistence with older libraries (e.g. MooTools & Prototype.js) which modify the in-builtArray.fromfunction -
#1481
46f1b25Thanks @eoghanmurray! - Fix and test for bug #1457 which was affecting replay of complex tailwind css -
#1476
cbbd1e5Thanks @eoghanmurray! - Fixup for multiple background-clip replacement -
#1600
a6893f7Thanks @eoghanmurray! - #1575 Fix that postcss could fall over when trying to process css content split arbitrarily -
#1133
c28ef5fThanks @eoghanmurray! - Fix: CSS transitions are incorrectly being applied upon rebuild in Firefox. Presumably FF doesn't finished parsing the styles in time, and applies e.g. a default margin:0 to elements which have a non-zero margin set in CSS, along with a transition on them.Related bug report to Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=1816672
-
#1387
5e7943dThanks @H4ad! - Avoid recreating the same element every time, instead, we cache and we just update the element.Before: 779k ops/s
After: 860k ops/sBenchmark: https://jsbench.me/ktlqztuf95/1
-
#1468
4014305Thanks @eoghanmurray! - inlineImages: during snapshot avoid adding an event listener for inlining of same-origin images (async listener mutates the snapshot which can be problematic) -
#1287
efdc167Thanks @Juice10! - Upgrade all projects to typescript 4.9.5 -
#1130
f6f07e9Thanks @AgentWrapper! - Fix: Make relative path detection in stylesheet URLs to detect more types of URL protocols when inlining stylesheets. -
#1095
1385f7aThanks @YunFeng0817! - Fix duplicated shadow doms -
#1183
d7c72bfThanks @mydea! - fix: Ensure attributes are lowercased when checking -
#1705
f2419f2Thanks @megboehlert! - Use ownerNode.baseURI for stringifying sheet hrefs -
#1440
c0f83afThanks @daibhin! - better nested css selector splitting when commas or brackets happen to be in quoted text -
#1467
e96f668Thanks @eoghanmurray! - Bugfix after #1434 perf improvements: fix that blob urls persist on the shared anchor element and can't be later modified -
#1272
58c9104Thanks @eoghanmurray! - Perf: Avoid creation of intermediary array when iterating over style rules -
#1126
227d43aThanks @YunFeng0817! - Refactor all suffix of bundled scripts with commonjs module from 'js' to cjs #1087. -
#1493
82f6fecThanks @eoghanmurray! - Replay: Replace negative lookbehind in regexes from css parser as it causes issues with Safari 16 -
#1331
02cc62dThanks @billyvg! - fix dimensions for blocked element not being applied -
#1148
d0fdc0fThanks @YunFeng0817! - Improve: Add try catch to snapshot.ts 's masking text function. Fixes #1118. -
#1482
f3cf092Thanks @AlfieJones! - (whenrecordCanvas: true): ensure we use doc.createElement instead of document.createElement to allow use in non-browser e.g. jsdom environments -
#1351
a2be77bThanks @eoghanmurray! - Don't double-record the values of <textarea>s when they already have some content prefilled #1301 -
#1837
527d9d3Thanks @Juice10! - Tree-shake replay-onlypostcsscode from the@rrweb/recordbundle. -
#1287
efdc167Thanks @Juice10! - Add workaround for Chrome/Edge CSS@importescaping bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1472259 -
#1431
a7c33f2Thanks @eoghanmurray! - Ensure :hover works on replayer, even if a rule is behind a media query
Respect the intent behind max-device-width and min-device-width media queries so that their effects are apparent in the replayer context -
#1614
6f4e691Thanks @billyvg! - Change to ignore all link[rel="modulepreload"] instead of including only those withas="script" -
#1535
04ee6edThanks @eoghanmurray! - Slight simplification to how we replace :hover after #1458 -
#1437
5fbb904Thanks @eoghanmurray! - Edge case: Provide support for mutations on a <style> element which (unusually) has multiple text nodes -
#1533
d350da8Thanks @jeffdnguyen! - Fixurl()rewrite for nested stylesheets by rewriting during stringification instead of after -
#1512
d08624cThanks @eoghanmurray! - optimisation: skip mask check on leaf elements -
#1174
e7f0c80Thanks @wfk007! - Fix: #1172 don't replace original onload function of Images -
#1155
8aea5b0Thanks @YunFeng0817! - Feat: Add 'isCustom' flag to serialized elements.This flag is used to indicate whether the element is a custom element or not. This is useful for replaying the :defined pseudo-class of custom elements.
-
#1374
314a8ddThanks @andrewpomeroy! - Capture stylesheets designated asrel="preload" -
#1731
76df979Thanks @eoghanmurray! - Fix missing import after #1705 -
#1157
8e47ca1Thanks @mydea! - fix: Explicitly handlenullattribute values -
#1349
07ac5c9Thanks @eoghanmurray! - Snapshot performance when masking text: Avoid the repeated calls toclosestwhen recursing through the DOM -
#1253
c6600e7Thanks @mydea! - Fix CSS rules captured in Safari -
#1704
33e01f5Thanks @eoghanmurray! - Provide a /umd/ output folder alongside the /dist/ one so that we can serve UMD (Universal Module Definition) files with a .js extension, without upsetting expectations set by package.json that all .js files in /dist/ are modules -
#760
e08706aThanks @eoghanmurray! - Add slimDOM option to block animation on <title> tag; enabled when the 'all' value is used for slimDOM -
#1509
be6bf52Thanks @Juice10! - Reverse monkey patch built in methods to support LWC (and other frameworks like angular which monkey patch built in methods). -
#1047
9bbc3e0Thanks @Juice10! - Preserve-webkit-background-clip: textwhen serializing CSS rules. -
#1012
6f44bb7Thanks @Juice10! - Ensure replay pluginonBuildhooks run for newly appended mutation nodes and top-level rebuilt document nodes. -
#995
55ebce7Thanks @YunFeng0817! - Fix replay of delayed inlined stylesheet links by updating the existing link/style node attributes instead of adding a child node. -
#970
23e3a73Thanks @Juice10! - Apply internalrr_*attributes after normal attributes so replay-only values such asrr_dataURLare not overwritten by serialized DOM attributes. -
#927
fd85c79Thanks @Juice10! - Fix iframe reload and rrdom diff issues by handling negative and unserialized node ids correctly. -
#984
6eaec04Thanks @QuentinLowe! - Fix iframe replay failures after the second full snapshot. -
#994
a9a2559Thanks @wfk007! - Fix missing mutations when usingslimDOMOptionsby tracking ignored nodes in the mirror. -
#938
f3064c1Thanks @lele0108! - Fix SVG<use href="#...">snapshot serialization so local fragment references are preserved instead of converted to absolute URLs. -
#942
f03504aThanks @YunFeng0817! - Fix recording and replay of polyfilled Shadow DOM from ShadyDOM and@lwc/synthetic-shadow. -
#944
f1b23ddThanks @YunFeng0817! - Fix fast-forward replay so canvas image data inside iframes is restored when rebuilding through the virtual DOM path. -
#906
9da1e43Thanks @Juice10! - Fix issue #904 in snapshot serialization. -
#903
058c457Thanks @Juice10! - Speed up snapshotting of many newly added DOM nodes. -
#909
d5d877eThanks @Juice10! - Inline stylesheets when they load so late stylesheet content is captured.