* inline stylesheets when loaded
* set empty link elements to loaded by default
* Clean up stylesheet manager
* Remove attribute mutation code
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/scripts/repl.js
* Update packages/rrweb/test/record.test.ts
* Update packages/rrweb/src/record/index.ts
* Add todo
* Move require out of time sensitive assert
* Add waitForRAF, its more reliable than waitForTimeout
* Remove flaky tests
* Add recording stylesheets in iframes
* Remove variability from flaky test
* Make test more robust
* Fix naming
* Add test cases for inlineImages
* Add test cases for inlineImages
* Record iframe mutations cross page
* Test: should record images inside iframe with blob url after iframe was reloaded
* Handle negative ids in rrdom correctly
When iframes get inserted they create untracked elements, both on the dom and rrdom side.
Because they are untracked they generate negative numbers when fetching the id from mirror.
This creates a problem when comparing and fetching ids across mirrors.
This commit tries to get away from using negative ids as much as possible in rrdom's comparisons
* Update packages/rrdom/src/diff.ts
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
* Start unserialized nodes at -2
This way we don't accidentally think of them as mirror misses
* Set unserialized id starting number at -2
* Remove duplication
* Use turbo instead of lerna
* Skip benchmark as it is unreliable when executed in parallel
* Strip port number from serialization, it can vary
* Add settimeout to virtual dom test
* Remove console.log and refactor blob:url serialization
* Include references in tsconfig to indicate which monorepo packages are being used
* Add stream setup
* Migrate project to es module
* Add reference to rrweb from rrdom
* Move jest config to ESM
* Setup basic WebRTC canvas streaming
* Cleanup and refactor WebRTC streaming
* Remove ? which isn't propper javascript
* Yarn lock
* Remove webrtc code from rrweb
* Add plugin hooks
Record/Replay plugins
`.getMirror` exposes the mirror to plugins
Replay plugins
`.onBuild` called whenever a node was added to the dom
* Expose plugins with server
* Use unminified version for tests
* Don't include simple-peer in rrweb main project
* Add canvas webrtc plugin
Streams contents of canvas via webrtc
* ignore tsconfig.tsbuildinfo
* Cleanup unused code
* type definition files are no longer committed
* Devtools off by default
* Extract .css into its own file
* Refactor plugin apis and fix multi canvas streaming support
* Add readme to rrweb canvas webrtc plugin
* Reference canvas-webrtc plugin in documentation
* Forbidden non-null assertion
* Remove linting of each project, yarn lint:report will do this
* Remove test code
* Cut down line length
* fix CI failure and improve the zh_CN doc
* Update packages/rrweb/src/plugins/canvas-webrtc/replay/index.ts
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
* Cleaner styling of replay
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
* Clean up stream.js based on @Mark-Fenng's feedback
* Remove duplicate send
Co-authored-by: Yun Feng <yun.feng@anu.edu.au>
Co-authored-by: Yun Feng <yun.feng0817@gmail.com>
* Add very basic webgl support
* document the default
* only capture rr_dataURL in 2d canvas contexts
* rr_dataURL no longer part of webgl snapshot
* ignore __diff_output__ from jest-image-snapshot
* Rename generic "Monorepo" to "RRWeb Monorepo"
* Serialize WebGL variables
* Move rrweb test port number to unique port
rrweb-snapshot uses 3030, rrweb uses 3031
* Prepare for WebGL2
* Split up canvas replay and record webgl vars
* fix typo
* fix typo part 2
* fix typo
* Handle non-variables too
* provide correct context for warning
* (De)Serialize a lot of different objects
* monorepo root should be the first in the list
* Upgrade puppeteer to 11.x
* Correctly de-serialize webgl variables
* Encode arrayBuffers contents to base64
* rename contents to base64
* add webgl2 support and serialize HTMLImageElements
* Support serializing ImageData
* Correctly classify WebGL2 events
* Serialize format changed
* check if canvas has contents before we save the dataURL
* Remove blank dataURL
* reference original file not type defintion file
* update types
* rename code worspace
* update dependencies
* add spector to inspect webgl
* remove live server settings from code workspace
* Save canvas context in the node
Prevents from saving webgl canvases as 2d dataUrls
* remove extra braces
* add ICanvas type
* use ICanvas from rrweb-snapshot in rrweb instead of OgmentedCanvas
* add snapshots and webgl 2 tests
* Upgrade to puppeteer 12.0.1
* Revert back to puppeteer 9.1.1
* Keep index order consistent between replay and record
* keep correct index order in webgl2
* fixed forgotten import
* buffer up pending canvas mutations
* unify the way webgl and webgl2 get patched
* fix parsing error
* Add types for serialize-args
* Add debugging for webgl replay
* Move start-server to utils
* turn off debug mode by default
* Move pendingCanvasMutations to local object and fix if/else statement
* Always save pending mutations
* only use assert snapshot as it's clearer whats going on
* Ugly fix for now
* Making the tests more DRY
* flush at the end of each request animation frame
* Looks like the promise made this test more predictable
* add waitForRAF
* Make nested iframe recording robust no matter the test speed
* mute noisy error in test
* force a requestAnimationFrame
* Bundle events within one frame together as much as possible
WebGL events need to be bundled together as much as possible so they don't accidentally get split over multiple animation frames.
`newFrame: true` is used to indicate the start of an new animation frame in the recording, and that the event shouldn't be bundled with the previous events.
* Rename RafStamps
* Override event.delay
* cleanup
* Add tests for addDelay
* Add webgl e2e test
* Remove settimeout
* DRY-up test
* Preload images in webgl
* Add e2e test for webgl image preloading
* don't turn on devtools by default!
* Remove spector
* close server after use
* Add imageMap parameter
* Make e2e image test more robust
* document debug mode
* cleanup
* WebGL recording in iframes & Safari 14 support
* fix tests
* don't save null objects as WebGLVar
* group (de)serialized webgl variables by context
* Fix test
* fix tests
* bundle webgl mutations on request animation frame
Instead of fixing it on the replay side we buffer up webgl canvas mutations and wait for a new RAF to flush them. This allows us to remove `newFrame` from the events and simplify things a little
* Add canvas element to mutation observer file
* Add Canvas (Mutation) Manager
Allows you to do `record.freezePage()` and canvas events will get paused.
Based on https://github.com/rrweb-io/rrweb/pull/756#issuecomment-1007566907
* cleanup
* Make sure the correct </body> gets replaced
* Perf: Speed up check to see if canvas is blank
* Access unpatched getImageData
* Use is2DCanvasBlank only for 2d context