github rrweb-io/rrweb rrweb-snapshot@2.0.0

6 hours ago

Major Changes

  • #1497 2606a2a Thanks @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 from rrweb/typings/... or rrdom/es. However you run import 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.cjs files instead. All .js files 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 .cjs and .umd.cjs files. The .umd.cjs files are CommonJS modules that bundle all files together to make it easy to ship one file to browser environments (similar to the previous .js files). The .cjs files are CommonJS modules that can be used in older Node.js environments. Types should be better defined in package.json and if you need specific types they might be exported from new packages (for example PlayerMachineState and SpeedMachineState are now exported from @rrweb/replay). Check the package.json's main and exports field for the available files.

  • #1834 43e4f5b Thanks @Juice10! - Require browser rebuild() calls to target a document created by rebuildIntoSandboxedIframe() or createSandboxedIframe() by default. Use these helpers for untrusted replay data, or pass UNSAFE_allowUnprotectedRebuild: true only when accepting the script-execution risk.

    rrweb now marks UNSAFE_replayCanvas rebuilds as an explicit unsafe path because canvas replay adds script permission to the replay iframe.

  • #1593 5a78938 Thanks @daibhin! - NodeType enum 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, attributes and DataURLOptions

  • #868 e4f680e Thanks @Juice10! - Remove INode / node.__sn usage and use Mirror as the source of truth.

Minor Changes

  • #1432 123a81e Thanks @Juice10! - Video and Audio elements now also capture playbackRate, muted, loop, volume.

  • #1503 335639a Thanks @Juice10! - Record dialog's modal status for replay in rrweb. (Currently triggering dialog.showModal() is not supported in rrweb-snapshot's rebuild)

  • #1188 bc84246 Thanks @benjackwhite! - feat: Extends maskInputFn to pass the HTMLElement to the deciding function

  • #1170 d2582e9 Thanks @mydea! - feat: Ensure password inputs remain masked when switching input type

  • #1152 eac9b18 Thanks @mydea! - feat: Ignore autoplay attribute on video/audio elements

  • #1310 7c0dc9d Thanks @benjackwhite! - Extends maskTextFn to pass the HTMLElement to the deciding function

  • #1035 2a80949 Thanks @Juice10! - Add support for cross-origin iframe recording, including event/id remapping and genId export support.

  • #989 3809060 Thanks @YunFeng0817! - Add support for recording and replaying constructable adoptedStyleSheets, including stylesheet mutations, replace/replaceSync, shadow roots, iframes, live mode, and virtual DOM replay.

  • #895 de755ae Thanks @Juice10! - Add the fast-forward virtual DOM optimization for replay.

Patch Changes

  • #1580 47a7c3f Thanks @guntherjh! - Handle exceptions thrown from postcss when calling adaptCssForReplay

  • #1386 a2c8a1a Thanks @ababik! - Fix that the optional maskInputFn was being accidentally ignored during the creation of the full snapshot

  • #1417 40bbc25 Thanks @YunFeng0817! - fix: duplicate textContent for style elements cause incremental style mutations to be invalid

  • #1762 22bc4c3 Thanks @Juice10! - Drop base64 inlined worker source from all bundles

  • #1279 11f6567 Thanks @eoghanmurray! - Extend to run fixBrowserCompatibilityIssuesInCSS over inline stylesheets

  • #1615 dc20cd4 Thanks @eoghanmurray! - Improve performance of splitCssText for <style> elements with large css content - see #1603

  • #1640 3e9e42f Thanks @eoghanmurray! - Improve performance of splitCssText for <style> elements with large css content - see #1603

  • #1464 03b5216 Thanks @colingm! - better support for coexistence with older libraries (e.g. MooTools & Prototype.js) which modify the in-built Array.from function

  • #1481 46f1b25 Thanks @eoghanmurray! - Fix and test for bug #1457 which was affecting replay of complex tailwind css

  • #1476 cbbd1e5 Thanks @eoghanmurray! - Fixup for multiple background-clip replacement

  • #1600 a6893f7 Thanks @eoghanmurray! - #1575 Fix that postcss could fall over when trying to process css content split arbitrarily

  • #1133 c28ef5f Thanks @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 5e7943d Thanks @H4ad! - Avoid recreating the same element every time, instead, we cache and we just update the element.

    Before: 779k ops/s
    After: 860k ops/s

    Benchmark: https://jsbench.me/ktlqztuf95/1

  • #1468 4014305 Thanks @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 efdc167 Thanks @Juice10! - Upgrade all projects to typescript 4.9.5

  • #1130 f6f07e9 Thanks @AgentWrapper! - Fix: Make relative path detection in stylesheet URLs to detect more types of URL protocols when inlining stylesheets.

  • #1095 1385f7a Thanks @YunFeng0817! - Fix duplicated shadow doms

  • #1183 d7c72bf Thanks @mydea! - fix: Ensure attributes are lowercased when checking

  • #1705 f2419f2 Thanks @megboehlert! - Use ownerNode.baseURI for stringifying sheet hrefs

  • #1440 c0f83af Thanks @daibhin! - better nested css selector splitting when commas or brackets happen to be in quoted text

  • #1467 e96f668 Thanks @eoghanmurray! - Bugfix after #1434 perf improvements: fix that blob urls persist on the shared anchor element and can't be later modified

  • #1272 58c9104 Thanks @eoghanmurray! - Perf: Avoid creation of intermediary array when iterating over style rules

  • #1126 227d43a Thanks @YunFeng0817! - Refactor all suffix of bundled scripts with commonjs module from 'js' to cjs #1087.

  • #1493 82f6fec Thanks @eoghanmurray! - Replay: Replace negative lookbehind in regexes from css parser as it causes issues with Safari 16

  • #1331 02cc62d Thanks @billyvg! - fix dimensions for blocked element not being applied

  • #1148 d0fdc0f Thanks @YunFeng0817! - Improve: Add try catch to snapshot.ts 's masking text function. Fixes #1118.

  • #1482 f3cf092 Thanks @AlfieJones! - (when recordCanvas: true): ensure we use doc.createElement instead of document.createElement to allow use in non-browser e.g. jsdom environments

  • #1351 a2be77b Thanks @eoghanmurray! - Don't double-record the values of <textarea>s when they already have some content prefilled #1301

  • #1837 527d9d3 Thanks @Juice10! - Tree-shake replay-only postcss code from the @rrweb/record bundle.

  • #1401 f7c6973 Thanks @dengelke! - Fix css parsing errors

  • #1287 efdc167 Thanks @Juice10! - Add workaround for Chrome/Edge CSS @import escaping bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1472259

  • #1431 a7c33f2 Thanks @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 6f4e691 Thanks @billyvg! - Change to ignore all link[rel="modulepreload"] instead of including only those with as="script"

  • #1535 04ee6ed Thanks @eoghanmurray! - Slight simplification to how we replace :hover after #1458

  • #1437 5fbb904 Thanks @eoghanmurray! - Edge case: Provide support for mutations on a <style> element which (unusually) has multiple text nodes

  • #1533 d350da8 Thanks @jeffdnguyen! - Fix url() rewrite for nested stylesheets by rewriting during stringification instead of after

  • #1512 d08624c Thanks @eoghanmurray! - optimisation: skip mask check on leaf elements

  • #1174 e7f0c80 Thanks @wfk007! - Fix: #1172 don't replace original onload function of Images

  • #1155 8aea5b0 Thanks @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 314a8dd Thanks @andrewpomeroy! - Capture stylesheets designated as rel="preload"

  • #1731 76df979 Thanks @eoghanmurray! - Fix missing import after #1705

  • #1157 8e47ca1 Thanks @mydea! - fix: Explicitly handle null attribute values

  • #1349 07ac5c9 Thanks @eoghanmurray! - Snapshot performance when masking text: Avoid the repeated calls to closest when recursing through the DOM

  • #1253 c6600e7 Thanks @mydea! - Fix CSS rules captured in Safari

  • #1704 33e01f5 Thanks @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 e08706a Thanks @eoghanmurray! - Add slimDOM option to block animation on <title> tag; enabled when the 'all' value is used for slimDOM

  • #1509 be6bf52 Thanks @Juice10! - Reverse monkey patch built in methods to support LWC (and other frameworks like angular which monkey patch built in methods).

  • #1047 9bbc3e0 Thanks @Juice10! - Preserve -webkit-background-clip: text when serializing CSS rules.

  • #1012 6f44bb7 Thanks @Juice10! - Ensure replay plugin onBuild hooks run for newly appended mutation nodes and top-level rebuilt document nodes.

  • #995 55ebce7 Thanks @YunFeng0817! - Fix replay of delayed inlined stylesheet links by updating the existing link/style node attributes instead of adding a child node.

  • #970 23e3a73 Thanks @Juice10! - Apply internal rr_* attributes after normal attributes so replay-only values such as rr_dataURL are not overwritten by serialized DOM attributes.

  • #927 fd85c79 Thanks @Juice10! - Fix iframe reload and rrdom diff issues by handling negative and unserialized node ids correctly.

  • #984 6eaec04 Thanks @QuentinLowe! - Fix iframe replay failures after the second full snapshot.

  • #994 a9a2559 Thanks @wfk007! - Fix missing mutations when using slimDOMOptions by tracking ignored nodes in the mirror.

  • #938 f3064c1 Thanks @lele0108! - Fix SVG <use href="#..."> snapshot serialization so local fragment references are preserved instead of converted to absolute URLs.

  • #942 f03504a Thanks @YunFeng0817! - Fix recording and replay of polyfilled Shadow DOM from ShadyDOM and @lwc/synthetic-shadow.

  • #944 f1b23dd Thanks @YunFeng0817! - Fix fast-forward replay so canvas image data inside iframes is restored when rebuilding through the virtual DOM path.

  • #906 9da1e43 Thanks @Juice10! - Fix issue #904 in snapshot serialization.

  • #903 058c457 Thanks @Juice10! - Speed up snapshotting of many newly added DOM nodes.

  • #909 d5d877e Thanks @Juice10! - Inline stylesheets when they load so late stylesheet content is captured.

Don't miss a new rrweb release

NewReleases is sending notifications on new releases.