@highlight-run/rrweb 1.2.1 → 2.0.0-lambda.1

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.
Files changed (114) hide show
  1. package/CHANGELOG.md +359 -19
  2. package/README.md +147 -34
  3. package/dist/assets/image-bitmap-data-url-worker-DwtK8A0z.js.map +1 -0
  4. package/dist/rrweb.cjs +17806 -0
  5. package/dist/rrweb.cjs.map +1 -0
  6. package/dist/rrweb.d.cts +509 -0
  7. package/dist/rrweb.d.ts +509 -0
  8. package/dist/rrweb.js +17807 -0
  9. package/dist/rrweb.js.map +1 -0
  10. package/dist/rrweb.umd.cjs +17810 -0
  11. package/dist/rrweb.umd.cjs.map +7 -0
  12. package/dist/rrweb.umd.min.cjs +90 -0
  13. package/dist/rrweb.umd.min.cjs.map +7 -0
  14. package/dist/{index.css → style.css} +23 -14
  15. package/dist/style.min.css +2 -0
  16. package/dist/style.min.css.map +7 -0
  17. package/package.json +67 -61
  18. package/rrweb-record/package.json +4 -0
  19. package/rrweb-replay/package.json +4 -0
  20. package/README.zh_CN.md +0 -122
  21. package/dist/entries/all.d.ts +0 -4
  22. package/dist/entries/record-pack.d.ts +0 -2
  23. package/dist/entries/replay-unpack.d.ts +0 -2
  24. package/dist/index.css.map +0 -1
  25. package/dist/index.d.ts +0 -9
  26. package/dist/index.js +0 -3
  27. package/dist/index.js.LICENSE.txt +0 -14
  28. package/dist/index.js.map +0 -1
  29. package/dist/packer/base.d.ts +0 -7
  30. package/dist/packer/index.d.ts +0 -2
  31. package/dist/packer/pack.d.ts +0 -2
  32. package/dist/packer/unpack.d.ts +0 -2
  33. package/dist/plugins/console/record/error-stack-parser.d.ts +0 -37
  34. package/dist/plugins/console/record/index.d.ts +0 -41
  35. package/dist/plugins/console/record/stringify.d.ts +0 -2
  36. package/dist/plugins/console/replay/index.d.ts +0 -9
  37. package/dist/plugins/console-record.min.js +0 -16
  38. package/dist/plugins/console-record.min.js.map +0 -1
  39. package/dist/plugins/entries/all.d.ts +0 -4
  40. package/dist/plugins/entries/record-pack.d.ts +0 -2
  41. package/dist/plugins/entries/replay-unpack.d.ts +0 -2
  42. package/dist/plugins/index.d.ts +0 -9
  43. package/dist/plugins/packer/base.d.ts +0 -7
  44. package/dist/plugins/packer/index.d.ts +0 -2
  45. package/dist/plugins/packer/pack.d.ts +0 -2
  46. package/dist/plugins/packer/unpack.d.ts +0 -2
  47. package/dist/plugins/plugins/console/record/error-stack-parser.d.ts +0 -37
  48. package/dist/plugins/plugins/console/record/index.d.ts +0 -41
  49. package/dist/plugins/plugins/console/record/stringify.d.ts +0 -2
  50. package/dist/plugins/plugins/console/replay/index.d.ts +0 -9
  51. package/dist/plugins/plugins/sequential-id/record/index.d.ts +0 -6
  52. package/dist/plugins/plugins/sequential-id/replay/index.d.ts +0 -7
  53. package/dist/plugins/record/iframe-manager.d.ts +0 -13
  54. package/dist/plugins/record/index.d.ts +0 -9
  55. package/dist/plugins/record/mutation.d.ts +0 -45
  56. package/dist/plugins/record/observer.d.ts +0 -11
  57. package/dist/plugins/record/observers/canvas/2d.d.ts +0 -2
  58. package/dist/plugins/record/observers/canvas/canvas-manager.d.ts +0 -32
  59. package/dist/plugins/record/observers/canvas/canvas.d.ts +0 -2
  60. package/dist/plugins/record/observers/canvas/serialize-args.d.ts +0 -6
  61. package/dist/plugins/record/observers/canvas/webgl.d.ts +0 -2
  62. package/dist/plugins/record/shadow-dom-manager.d.ts +0 -34
  63. package/dist/plugins/replay/canvas/2d.d.ts +0 -9
  64. package/dist/plugins/replay/canvas/index.d.ts +0 -9
  65. package/dist/plugins/replay/canvas/webgl.d.ts +0 -11
  66. package/dist/plugins/replay/index.d.ts +0 -82
  67. package/dist/plugins/replay/machine.d.ts +0 -85
  68. package/dist/plugins/replay/smoothscroll.d.ts +0 -1
  69. package/dist/plugins/replay/styles/inject-style.d.ts +0 -2
  70. package/dist/plugins/replay/timer.d.ts +0 -19
  71. package/dist/plugins/replay/virtual-styles.d.ts +0 -43
  72. package/dist/plugins/rrdom/index.d.ts +0 -1
  73. package/dist/plugins/rrdom/tree-node.d.ts +0 -20
  74. package/dist/plugins/sequential-id/record/index.d.ts +0 -6
  75. package/dist/plugins/sequential-id/replay/index.d.ts +0 -7
  76. package/dist/plugins/snapshot/css.d.ts +0 -92
  77. package/dist/plugins/snapshot/index.d.ts +0 -5
  78. package/dist/plugins/snapshot/rebuild.d.ts +0 -19
  79. package/dist/plugins/snapshot/snapshot.d.ts +0 -49
  80. package/dist/plugins/snapshot/types.d.ts +0 -99
  81. package/dist/plugins/snapshot/utils.d.ts +0 -11
  82. package/dist/plugins/types.d.ts +0 -509
  83. package/dist/plugins/utils.d.ts +0 -71
  84. package/dist/record/iframe-manager.d.ts +0 -13
  85. package/dist/record/index.d.ts +0 -9
  86. package/dist/record/mutation.d.ts +0 -45
  87. package/dist/record/observer.d.ts +0 -11
  88. package/dist/record/observers/canvas/2d.d.ts +0 -2
  89. package/dist/record/observers/canvas/canvas-manager.d.ts +0 -32
  90. package/dist/record/observers/canvas/canvas.d.ts +0 -2
  91. package/dist/record/observers/canvas/serialize-args.d.ts +0 -6
  92. package/dist/record/observers/canvas/webgl.d.ts +0 -2
  93. package/dist/record/shadow-dom-manager.d.ts +0 -34
  94. package/dist/replay/canvas/2d.d.ts +0 -9
  95. package/dist/replay/canvas/index.d.ts +0 -9
  96. package/dist/replay/canvas/webgl.d.ts +0 -11
  97. package/dist/replay/index.d.ts +0 -82
  98. package/dist/replay/machine.d.ts +0 -85
  99. package/dist/replay/smoothscroll.d.ts +0 -1
  100. package/dist/replay/styles/inject-style.d.ts +0 -2
  101. package/dist/replay/timer.d.ts +0 -19
  102. package/dist/replay/virtual-styles.d.ts +0 -43
  103. package/dist/rrdom/index.d.ts +0 -1
  104. package/dist/rrdom/tree-node.d.ts +0 -20
  105. package/dist/rrweb.min.js +0 -30
  106. package/dist/rrweb.min.js.map +0 -1
  107. package/dist/snapshot/css.d.ts +0 -92
  108. package/dist/snapshot/index.d.ts +0 -5
  109. package/dist/snapshot/rebuild.d.ts +0 -19
  110. package/dist/snapshot/snapshot.d.ts +0 -49
  111. package/dist/snapshot/types.d.ts +0 -99
  112. package/dist/snapshot/utils.d.ts +0 -11
  113. package/dist/types.d.ts +0 -509
  114. package/dist/utils.d.ts +0 -71
package/README.md CHANGED
@@ -7,38 +7,28 @@
7
7
 
8
8
  # rrweb
9
9
 
10
- **[The new adventure of the rrweb community](http://www.myriptide.com/rrweb-community/)**
10
+ **This is a simpler version of the [original rrweb README](../../README.md) within this rrweb subpackage**
11
11
 
12
- [![Join the chat at slack](https://img.shields.io/badge/slack-@rrweb-teal.svg?logo=slack)](https://join.slack.com/t/rrweb/shared_invite/zt-siwoc6hx-uWay3s2wyG8t5GpZVb8rWg)
13
- ![total gzip size](https://img.badgesize.io/https://cdn.jsdelivr.net/npm/rrweb@latest/dist/rrweb.min.js?compression=gzip&label=total%20gzip%20size)
14
- ![recorder gzip size](https://img.badgesize.io/https://cdn.jsdelivr.net/npm/rrweb@latest/dist/record/rrweb-record.min.js?compression=gzip&label=recorder%20gzip%20size)
15
- [![](https://data.jsdelivr.com/v1/package/npm/rrweb/badge)](https://www.jsdelivr.com/package/npm/rrweb)
16
-
17
- [中文文档](./README.zh_CN.md)
18
-
19
- > I have joined Github Sponsors and highly appreciate your sponsorship.
12
+ [中文文档](../../README.zh_CN.md)
20
13
 
21
14
  rrweb refers to 'record and replay the web', which is a tool for recording and replaying users' interactions on the web.
22
15
 
23
16
  ## Guide
24
17
 
25
- [**📚 Read the rrweb guide here. 📚**](./guide.md)
18
+ [**📚 Read the rrweb guide here. 📚**](../../guide.md)
26
19
 
27
- [**🍳 Recipes 🍳**](./docs/recipes/index.md)
20
+ [**🍳 Recipes 🍳**](../../docs/recipes/index.md)
28
21
 
29
22
  ## Project Structure
30
23
 
31
- rrweb is mainly composed of 3 parts:
24
+ **[rrweb](https://github.com/rrweb-io/rrweb)** mainly includes two funtions:
32
25
 
33
- - **[rrweb-snapshot](https://github.com/rrweb-io/rrweb-snapshot)**, including both snapshot and rebuilding features. The snapshot is used to convert the DOM and its state into a serializable data structure with a unique identifier; the rebuilding feature is to rebuild the snapshot into corresponding DOM.
34
- - **[rrweb](https://github.com/rrweb-io/rrweb)**, including two functions, record and replay. The record function is used to record all the mutations in the DOM; the replay is to replay the recorded mutations one by one according to the corresponding timestamp.
35
- - **[rrweb-player](https://github.com/rrweb-io/rrweb-player)**, is a player UI for rrweb, providing GUI-based functions like pause, fast-forward, drag and drop to play at any time.
26
+ - **Record**: The record function is used to record all the mutations in the DOM
27
+ - **Replay**: The replay function is to replay the recorded mutations one by one according to the corresponding timestamp.
36
28
 
37
29
  ## Roadmap
38
30
 
39
- - rrdom: an ad-hoc DOM for rrweb session data [#419](https://github.com/rrweb-io/rrweb/issues/419)
40
31
  - storage engine: do deduplication on a large number of rrweb sessions
41
- - more end-to-end tests
42
32
  - compact mutation data in common patterns
43
33
  - provide plugins via the new plugin API, including:
44
34
  - XHR plugin
@@ -48,10 +38,10 @@ rrweb is mainly composed of 3 parts:
48
38
 
49
39
  ## Internal Design
50
40
 
51
- - [serialization](./docs/serialization.md)
52
- - [incremental snapshot](./docs/observer.md)
53
- - [replay](./docs/replay.md)
54
- - [sandbox](./docs/sandbox.md)
41
+ - [serialization](../../docs/serialization.md)
42
+ - [incremental snapshot](../../docs/observer.md)
43
+ - [replay](../../docs/replay.md)
44
+ - [sandbox](../../docs/sandbox.md)
55
45
 
56
46
  ## Contribute Guide
57
47
 
@@ -59,14 +49,70 @@ Since we want the record and replay sides to share a strongly typed data structu
59
49
 
60
50
  [Typescript handbook](https://www.typescriptlang.org/docs/handbook/declaration-files/introduction.html)
61
51
 
62
- 1. Fork the rrweb component repository you want to patch.
63
- 2. Run `npm install` to install required dependencies.
64
- 3. Patch the code and pass all the tests.
65
- 4. Push the code and create a pull request.
52
+ 1. Fork this repository.
53
+ 2. Run `yarn install` in the root to install required dependencies for all sub-packages (note: `npm install` is _not_ recommended).
54
+ 3. Run `yarn dev` in the root to get auto-building for all the sub-packages whenever you modify anything.
55
+ 4. Navigate to one of the sub-packages (in the `packages` folder) where you'd like to make a change.
56
+ 5. Patch the code and run `yarn test` to run the tests, make sure they pass before you commit anything.
57
+ 6. Push the code and create a pull request.
58
+
59
+ Protip: You can run `yarn test` in the root folder to run all the tests.
66
60
 
67
61
  In addition to adding integration tests and unit tests, rrweb also provides a REPL testing tool.
68
62
 
69
- [Using the REPL tool](./guide.md#REPL-tool)
63
+ [Using the REPL tool](../../guide.md#REPL-tool)
64
+
65
+ ## Sponsors
66
+
67
+ [Become a sponsor](https://opencollective.com/rrweb#sponsor) and get your logo on our README on Github with a link to your site.
68
+
69
+ ### Gold Sponsors 🥇
70
+
71
+ <div dir="auto">
72
+
73
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/0/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
74
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/1/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
75
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/2/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
76
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/3/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
77
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/4/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
78
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/5/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
79
+ <a href="https://opencollective.com/rrweb/tiers/gold-sponsor/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/gold-sponsor/6/avatar.svg?requireActive=false&avatarHeight=225" alt="sponsor"></a>
80
+
81
+ </div>
82
+
83
+ ### Silver Sponsors 🥈
84
+
85
+ <div dir="auto">
86
+
87
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/0/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
88
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/1/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
89
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/2/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
90
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/3/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
91
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/4/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
92
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/5/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
93
+ <a href="https://opencollective.com/rrweb/tiers/silver-sponsor/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/silver-sponsor/6/avatar.svg?requireActive=false&avatarHeight=158" alt="sponsor"></a>
94
+
95
+ </div>
96
+
97
+ ### Bronze Sponsors 🥉
98
+
99
+ <div dir="auto">
100
+
101
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/0/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/0/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
102
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/1/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/1/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
103
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/2/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/2/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
104
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/3/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/3/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
105
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/4/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/4/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
106
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/5/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/5/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
107
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/6/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/6/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
108
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/7/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/7/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
109
+ <a href="https://opencollective.com/rrweb/tiers/sponsors/8/website?requireActive=false" target="_blank"><img src="https://opencollective.com/rrweb/tiers/sponsors/8/avatar.svg?requireActive=false&avatarHeight=70" alt="sponsor"></a>
110
+
111
+ </div>
112
+
113
+ ### Backers
114
+
115
+ <a href="https://opencollective.com/rrweb#sponsor" rel="nofollow"><img src="https://opencollective.com/rrweb/tiers/backers.svg?avatarHeight=36"></a>
70
116
 
71
117
  ## Core Team Members
72
118
 
@@ -80,16 +126,18 @@ In addition to adding integration tests and unit tests, rrweb also provides a RE
80
126
  alt=""
81
127
  />
82
128
  <br /><sub><b>Yuyz0112</b></sub>
129
+ <br /><br />
83
130
  </a>
84
131
  </td>
85
132
  <td align="center">
86
- <a href="https://github.com/Mark-Fenng">
133
+ <a href="https://github.com/YunFeng0817">
87
134
  <img
88
135
  src="https://avatars.githubusercontent.com/u/27533910?s=100"
89
136
  width="100px;"
90
137
  alt=""
91
138
  />
92
- <br /><sub><b>Mark-Fenng</b></sub>
139
+ <br /><sub><b>Yun Feng</b></sub>
140
+ <br /><br />
93
141
  </a>
94
142
  </td>
95
143
  <td align="center">
@@ -100,6 +148,7 @@ In addition to adding integration tests and unit tests, rrweb also provides a RE
100
148
  alt=""
101
149
  />
102
150
  <br /><sub><b>eoghanmurray</b></sub>
151
+ <br /><br />
103
152
  </a>
104
153
  </td>
105
154
  <td align="center">
@@ -110,15 +159,79 @@ In addition to adding integration tests and unit tests, rrweb also provides a RE
110
159
  alt=""
111
160
  />
112
161
  <br /><sub><b>Juice10</b></sub>
162
+ <br /><sub>open for rrweb consulting</sub>
113
163
  </a>
114
164
  </td>
115
165
  </tr>
116
166
  </table>
117
167
 
118
- ## Who's using rrweb
168
+ ## Who's using rrweb?
119
169
 
120
- <p align="center">
121
- <a href="http://www.smartx.com/" target="_blank">
122
- <img width="260px" src="https://www.rrweb.io/logos/smartx.png">
123
- </a>
124
- </p>
170
+ <table>
171
+ <tr>
172
+ <td align="center">
173
+ <a href="http://www.smartx.com/" target="_blank">
174
+ <img width="195px" src="https://www.rrweb.io/logos/smartx.png">
175
+ </a>
176
+ </td>
177
+ <td align="center">
178
+ <a href="https://posthog.com?utm_source=rrweb&utm_medium=sponsorship&utm_campaign=open-source-sponsorship" target="_blank">
179
+ <img width="195px" src="https://www.rrweb.io/logos/posthog.png">
180
+ </a>
181
+ </td>
182
+ <td align="center">
183
+ <a href="https://statcounter.com/session-replay/" target="_blank">
184
+ <img width="195px" src="https://statcounter.com/images/logo-statcounter-arc-blue.svg">
185
+ </a>
186
+ </td>
187
+ <td align="center">
188
+ <a href="https://recordonce.com/" target="_blank">
189
+ <img width="195px" alt="Smart screen recording for SaaS" src="https://uploads-ssl.webflow.com/5f3d133183156245630d4446/5f3d1940abe8db8612c23521_Record-Once-logo-554x80px.svg">
190
+ </a>
191
+ </td>
192
+ </tr>
193
+ <tr>
194
+ <td align="center">
195
+ <a href="https://cux.io" target="_blank">
196
+ <img style="padding: 8px" alt="The first ever UX automation tool" width="195px" src="https://cux.io/cux-logo.svg">
197
+ </a>
198
+ </td>
199
+ <td align="center">
200
+ <a href="https://remsupp.com" target="_blank">
201
+ <img style="padding: 8px" alt="Remote Access & Co-Browsing" width="195px" src="https://remsupp.com/images/logo.png">
202
+ </a>
203
+ </td>
204
+ <td align="center">
205
+ <a href="https://highlight.io" target="_blank">
206
+ <img style="padding: 8px" alt="The open source, fullstack Monitoring Platform." width="195px" src="https://github.com/highlight/highlight/raw/main/highlight.io/public/images/logo.png">
207
+ </a>
208
+ </td>
209
+ <td align="center">
210
+ <a href="https://analyzee.io" target="_blank">
211
+ <img style="padding: 8px" alt="Comprehensive data analytics platform that empowers businesses to gain valuable insights and make data-driven decisions." width="195px" src="https://cdn.analyzee.io/assets/analyzee-logo.png">
212
+ </a>
213
+ </td>
214
+ </tr>
215
+ <tr>
216
+ <td align="center">
217
+ <a href="https://requestly.io" target="_blank">
218
+ <img style="padding: 8px" alt="Intercept, Modify, Record & Replay HTTP Requests." width="195px" src="https://github.com/requestly/requestly/assets/16779465/652552db-c867-44cb-9bb5-94a2026e04ca">
219
+ </a>
220
+ </td>
221
+ <td align="center">
222
+ <a href="https://gleap.io" target="_blank">
223
+ <img style="padding: 8px" alt="In-app bug reporting & customer feedback platform." width="195px" src="https://assets-global.website-files.com/6506f3f29c68b1724807619d/6506f56010237164c6306591_GleapLogo.svg">
224
+ </a>
225
+ </td>
226
+ <td align="center">
227
+ <a href="https://uxwizz.com" target="_blank">
228
+ <img style="padding: 8px" alt="Self-hosted website analytics with heatmaps and session recordings." width="195px" src="https://github.com/UXWizz/public-files/raw/main/assets/logo.png">
229
+ </a>
230
+ </td>
231
+ <td align="center">
232
+ <a href="https://www.howdygo.com" target="_blank">
233
+ <img style="padding: 8px" alt="Interactive product demos for small marketing teams" width="195px" src="https://assets-global.website-files.com/650afb446f1dd5bd410f00cc/650b2cec6188ff54dd9b01e1_Logo.svg">
234
+ </a>
235
+ </td>
236
+ </tr>
237
+ </table>
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-bitmap-data-url-worker-DwtK8A0z.js","sources":["../../../../node_modules/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../src/record/workers/image-bitmap-data-url-worker.ts"],"sourcesContent":["/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n//# sourceMappingURL=base64-arraybuffer.es5.js.map\n","import { encode } from 'base64-arraybuffer';\nimport type {\n DataURLOptions,\n ImageBitmapDataURLWorkerParams,\n ImageBitmapDataURLWorkerResponse,\n} from '@rrweb/types';\n\nconst lastBlobMap: Map<number, string> = new Map();\nconst transparentBlobMap: Map<string, string> = new Map();\n\nexport interface ImageBitmapDataURLRequestWorker {\n postMessage: (\n message: ImageBitmapDataURLWorkerParams,\n transfer?: [ImageBitmap],\n ) => void;\n onmessage: (message: MessageEvent<ImageBitmapDataURLWorkerResponse>) => void;\n}\n\ninterface ImageBitmapDataURLResponseWorker {\n onmessage:\n | null\n | ((message: MessageEvent<ImageBitmapDataURLWorkerParams>) => void);\n postMessage(e: ImageBitmapDataURLWorkerResponse): void;\n}\n\nasync function getTransparentBlobFor(\n width: number,\n height: number,\n dataURLOptions: DataURLOptions,\n): Promise<string> {\n const id = `${width}-${height}`;\n if ('OffscreenCanvas' in globalThis) {\n if (transparentBlobMap.has(id)) return transparentBlobMap.get(id)!;\n const offscreen = new OffscreenCanvas(width, height);\n offscreen.getContext('2d'); // creates rendering context for `converToBlob`\n const blob = await offscreen.convertToBlob(dataURLOptions); // takes a while\n const arrayBuffer = await blob.arrayBuffer();\n const base64 = encode(arrayBuffer); // cpu intensive\n transparentBlobMap.set(id, base64);\n return base64;\n } else {\n return '';\n }\n}\n\nconst worker: ImageBitmapDataURLResponseWorker = self;\nlet logDebug = false;\n\nconst debug = (...args: any[]) => {\n if (logDebug) {\n console.debug(...args);\n }\n};\n\n// eslint-disable-next-line @typescript-eslint/no-misused-promises\nworker.onmessage = async function (e) {\n logDebug = !!e.data.logDebug;\n if ('OffscreenCanvas' in globalThis) {\n const { id, bitmap, width, height, dx, dy, dw, dh, dataURLOptions } =\n e.data;\n\n const transparentBase64 = getTransparentBlobFor(\n width,\n height,\n dataURLOptions,\n );\n\n const offscreen = new OffscreenCanvas(width, height);\n const ctx = offscreen.getContext('2d')!;\n\n ctx.drawImage(bitmap, 0, 0, width, height);\n bitmap.close();\n const blob = await offscreen.convertToBlob(dataURLOptions); // takes a while\n const type = blob.type;\n const arrayBuffer = await blob.arrayBuffer();\n const base64 = encode(arrayBuffer); // cpu intensive\n\n // on first try we should check if canvas is transparent,\n // no need to save it's contents in that case\n if (!lastBlobMap.has(id) && (await transparentBase64) === base64) {\n debug('[highlight-worker] canvas bitmap is transparent', {\n id,\n base64,\n });\n lastBlobMap.set(id, base64);\n return worker.postMessage({ id, status: 'transparent' });\n }\n\n // unchanged\n if (lastBlobMap.get(id) === base64) {\n debug('[highlight-worker] canvas bitmap is unchanged', {\n id,\n base64,\n });\n }\n const msg = {\n id,\n type,\n base64,\n width,\n height,\n dx,\n dy,\n dw,\n dh,\n };\n debug('[highlight-worker] canvas bitmap processed', msg);\n worker.postMessage(msg);\n lastBlobMap.set(id, base64);\n } else {\n debug('[highlight-worker] no offscreencanvas support', {\n id: e.data.id,\n });\n return worker.postMessage({ id: e.data.id, status: 'unsupported' });\n }\n};\n"],"names":["i"],"mappings":"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","x_google_ignoreList":[0]}