Commit Graph

47 Commits

Author SHA1 Message Date
Yanzhen Yu
d7a1b0c9e3 fix unit tests 2020-07-18 15:07:47 +08:00
yz-yu
7de7eb5e54 mask input options and sampling options (#252)
* part of #80, support mask input options

* close #188 enhance sampling options
Use a more general sampling strategy interface to describe the
configuration of sampling events collection.

Implemented mousmove, mouse interaction, scroll and input sampling
strategy.
2020-07-18 15:05:19 +08:00
Eoghan Murray
286b520907 Restore functioning of #200 - this got broken after #242 (#246)
- What was broken was that it would just play activity from the first page view, but then would stop at the second page view (meta) as actions after that had been discarded
 - This restores the functionality given by the comment 'return the events from last meta to the end.' - we never want to discard events that are after the baseline time
 - I believe 'session' is the incorrect terminology for this function name, as a session in web analytics usually means a series of page views
2020-07-16 00:12:37 +08:00
yz-yu
e2cc42e393 fix the skip event calculation (#242) 2020-07-11 17:06:56 +08:00
Yanzhen Yu
3e2b596664 tweak the code of getting last session, without splice events array 2020-07-11 11:03:40 +08:00
Jinxing Lin
0910447081 update packer unit test (#220) 2020-05-30 22:48:02 +08:00
yz-yu
7a666293b6 mutation observer v2 (#206)
There are some long-term issues in rrweb's mutation observer.

A scenario cause problem:
A list of DOM node: n1, n2, n3, n4, n5
Steps of modifying the nodes:
  1. remove n1, n2, n3, n4 sequentially
  2. append n4, n3, n2, n1 after n5 sequentially
Then we got the added node data like this:
  (id: n4, prev: null, next: n3  )
  (id: n3, prev: n4,   next: n2  )
  (id: n2, prev: n3,   next: n1  )
  (id: n1, prev: n2,   next: null)
The problem comes when we try to replay the first add node datum.
Since its prev node is null, we rely on its next sibling n3. But
n3 was not present at this moment, and in previous code, we fallback
to append n4 to the last of its parent node.

The solution is to defer the append of elements that missing
siblings. But it is also hard to tell which node is the first one
that needs to be appended.

Take a step back and rethink the design of the mutation observer,
we've found there are two implementations make things complicated.
1. We set the id to -1 when we seeing some nodes are not serialized yet.
2. We record both previous sibling and next sibling to determine the
position of the node.
But we can do better!
First, we can put nodes with un-serialized siblings
to a queue, and try to add it again later. Then we can just record the next
sibling as 'the single truth' so we can be sure which node is the last
one of its parent.

This patch has implemented the new observer strategy. Data recorded with
the new observer should no longer have any node with id -1. But for
compatibility consideration, we still keep some replayer code that helps
solve legacy data.
2020-05-02 14:08:10 +08:00
Yanzhen Yu
36ba02e709 use a fixed version of styled-components to make snapshot testing stable 2020-04-11 22:51:50 +08:00
Yanzhen Yu
8a1d74f6cb Update rollup
With rollup's preserveModules option and the sideEffects flag in
package.json, now we have the power of tree shaking.
2020-04-07 22:11:46 +08:00
yz-yu
4f36d0e57d Packer (#172)
* introduce pako and add general packer interface

* add tests for packer

* use function API instead of class API for better tree shaking support

* refcatoring the rollup bundle config
2020-04-07 18:03:47 +08:00
Yanzhen Yu
197526fbe8 ignore style sheet changes before the target DOM was serialized
The serialized DOM will contains all the styles, so this looks safe.
2020-03-22 00:36:20 +08:00
Yanzhen Yu
02a33faaf9 add an integration tests for react and styled components 2020-03-21 23:21:45 +08:00
Yanzhen Yu
5e549c4ee4 make the unit tests more stable 2020-03-21 22:18:08 +08:00
David Cramer
046936b3e8 Add observers for stylesheet mutations (#177)
* hack together stylesheet observer

* Add test coverage for insertRule/deleteRule on stylesheets

* Add new observers

* update patch based on changes to master

* Functioning event recording

* Remove print statements

* Fix ID usage and mark add vs remove

* Correct type

Co-authored-by: Jon Perl <perl.jonathan@gmail.com>
2020-02-22 12:59:55 +08:00
Yanzhen Yu
4426881f1f fix types in replayer unit test 2019-10-12 17:03:22 +08:00
Yanzhen Yu
ff34fb069e fix unit test types 2019-10-12 16:58:35 +08:00
Yanzhen Yu
3beb57273e Revert "temp revert #81"
This reverts commit 835161c737.
2019-08-12 21:26:35 +08:00
Yanzhen Yu
c00c4ad646 update mask option test snapshot 2019-08-12 21:24:47 +08:00
Yanzhen Yu
835161c737 temp revert #81
This patch introduce a breaking change in rrweb-record's API, so
we will revert it in 0.7.x and release it in 0.8.
2019-08-12 21:21:53 +08:00
Yanzhen Yu
f78070a824 impl #81 custom event
This is the record side impl of custom event, according to the
issue, we may also add first-class support for the custom event
tag like display color labels in the replayer-ui.
2019-07-24 22:32:11 +08:00
Yanzhen Yu
a51313d973 tweak some code for mask input option 2019-06-15 14:38:03 +08:00
Sebastian Jakob
189df87b9d Option to mask inputs (#80)
* Option to mask inputs

Added option 'maskAllInputs' to replace all user inputs with an Asterisk.

* Update types.d.ts
2019-06-15 12:52:08 +08:00
Yanzhen Yu
6d3b9c2345 Upgrade the DOM mutation observer
This is an important patch contains some crtical bug fixes for
the DOM mutation observer.
Previously the observer did not handle complex DOM movement very
well. So in this patch we optimized this by distinguishing moved
node better and added a resolving queue to avoid the error caused
by ordering.
2019-06-05 16:39:29 +08:00
Yanzhen Yu
dcc7b925fe fix character data test snapshot with latest puppeteer 2019-04-05 14:20:01 +08:00
Yanzhen Yu
faebeb08eb update typescript and fix test cases 2019-04-02 21:38:52 +08:00
Yanzhen Yu
406e7a8d39 update mutation observer handler
1. deep delete from adds set when node was dropped
2. remove node from dropped set when node was added again
2019-02-03 23:07:35 +08:00
yz-yu
128deca040 update dependencies and generate typings (#44) 2019-01-21 19:54:21 +08:00
yz-yu
3daedfa284 fix remove node observer and check on the result of getNode (#43)
* check removed node and its parent before collect

* add more more checks on the result of getNode
2019-01-21 19:18:51 +08:00
yz-yu
cedc87c69e add checkout config to recorder (#36)
* add checkout config to recorder

* add test cases for checkout feature and extract assertSnapshot method
2019-01-11 10:52:04 +08:00
Yanzhen Yu
8f24cb78b3 fix block strategy
If an element was blocked, its child nodes should also be blocked.
The interactions and mutations on the element and its child nodes
also need to be blocked.
2018-12-30 21:46:23 +08:00
Yanzhen Yu
6e41bc3bfa add some unit tests to replayer 2018-12-14 13:35:10 +08:00
Yanzhen Yu
af44982a79 update puppeteer to use setContent with wait and housekeeping the declaration files 2018-12-03 13:10:06 +08:00
Yanzhen Yu
2c9db926c0 resolve #1 add ignore and block strategy for privacy purpose 2018-12-02 23:23:21 +08:00
Yanzhen Yu
7343ce4719 refactor the repl tool to support multipage apps and better dev 2018-11-23 16:01:55 +08:00
Yanzhen Yu
2bf412c446 add bundle watch 2018-11-16 16:09:55 +08:00
Yanzhen Yu
40e030eda1 ignore href in integration test to avoid fail when code changed 2018-11-14 14:25:11 +08:00
Yanzhen Yu
8b4eb5caf0 fix repl rollup config 2018-11-14 13:15:37 +08:00
Yanzhen Yu
4a7e1e70c6 update test command 2018-11-13 16:26:11 +08:00
Yanzhen Yu
c91a3a3af6 add a repl mode for quick test 2018-11-06 14:23:30 +08:00
Yanzhen Yu
4709c720cd also resolve missing previous node 2018-11-05 13:20:42 +08:00
Yanzhen Yu
8ed1c999cf temp hack the integration test cases 2018-11-01 17:47:11 +08:00
Yanzhen Yu
86ad633080 add travis build 2018-11-01 14:58:37 +08:00
Yanzhen Yu
77dcfd8360 add select2.html snapshot test 2018-10-31 16:58:08 +08:00
Yanzhen Yu
7b9e57bd6c filter text and attributes mutations which target tot a removed node 2018-10-23 11:48:48 +08:00
Yanzhen Yu
68949a08c3 check added nodes from removed nodes and dropped nodes 2018-10-23 11:28:15 +08:00
Yanzhen Yu
d827fdc947 impl dynamic config and pause. Bump 0.3.0 2018-10-16 15:31:56 +08:00
Yanzhen Yu
4ae4222bc3 add test infra and a basic record integration test 2018-10-15 17:21:14 +08:00