@highlight-run/rrweb 2.0.1 → 2.0.6

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 (118) hide show
  1. package/dist/plugins/console-record.js +12 -655
  2. package/dist/plugins/console-record.min.js +12 -15
  3. package/dist/plugins/console-record.min.js.map +1 -1
  4. package/dist/plugins/console-replay.js +4 -293
  5. package/dist/plugins/console-replay.min.js +4 -15
  6. package/dist/plugins/console-replay.min.js.map +1 -1
  7. package/dist/plugins/sequential-id-record.js +1 -33
  8. package/dist/plugins/sequential-id-record.min.js +1 -1
  9. package/dist/plugins/sequential-id-record.min.js.map +1 -1
  10. package/dist/plugins/sequential-id-replay.js +1 -37
  11. package/dist/plugins/sequential-id-replay.min.js +1 -1
  12. package/dist/plugins/sequential-id-replay.min.js.map +1 -1
  13. package/dist/record/rrweb-record-pack.js +3 -747
  14. package/dist/record/rrweb-record-pack.min.js +3 -15
  15. package/dist/record/rrweb-record-pack.min.js.map +1 -1
  16. package/dist/record/rrweb-record.js +4 -3318
  17. package/dist/record/rrweb-record.min.js +4 -15
  18. package/dist/record/rrweb-record.min.js.map +1 -1
  19. package/dist/replay/rrweb-replay-unpack.css +1 -0
  20. package/dist/replay/rrweb-replay-unpack.js +5 -4614
  21. package/dist/replay/rrweb-replay-unpack.min.js +5 -17
  22. package/dist/replay/rrweb-replay-unpack.min.js.map +1 -1
  23. package/dist/replay/rrweb-replay.css +1 -0
  24. package/dist/replay/rrweb-replay.js +5 -4204
  25. package/dist/replay/rrweb-replay.min.js +5 -17
  26. package/dist/replay/rrweb-replay.min.js.map +1 -1
  27. package/dist/rrweb-all.css +1 -0
  28. package/dist/rrweb-all.js +16 -8696
  29. package/dist/rrweb-all.min.js +16 -17
  30. package/dist/rrweb-all.min.js.map +1 -1
  31. package/dist/rrweb.css +1 -0
  32. package/dist/rrweb.js +6 -7282
  33. package/dist/rrweb.min.js +6 -17
  34. package/dist/rrweb.min.js.map +1 -1
  35. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js +12 -0
  36. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js +7 -0
  37. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js +31 -0
  38. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js +11 -0
  39. package/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js +18 -0
  40. package/es/rrweb/_virtual/image-bitmap-data-url-worker.js +6 -0
  41. package/es/rrweb/all.css +1 -0
  42. package/es/rrweb/ext/mitt/dist/mitt.es.js +1 -1
  43. package/es/rrweb/ext/tslib/tslib.es6.js +38 -0
  44. package/es/rrweb/packages/rrdom/es/virtual-dom.js +1099 -0
  45. package/es/rrweb/packages/rrweb/src/index.js +6 -4
  46. package/es/rrweb/packages/rrweb/src/packer/base.js +1 -1
  47. package/es/rrweb/packages/rrweb/src/packer/pack.js +4 -5
  48. package/es/rrweb/packages/rrweb/src/packer/unpack.js +24 -24
  49. package/es/rrweb/packages/rrweb/src/plugins/console/record/error-stack-parser.js +175 -176
  50. package/es/rrweb/packages/rrweb/src/plugins/console/record/index.js +109 -128
  51. package/es/rrweb/packages/rrweb/src/plugins/console/record/stringify.js +125 -138
  52. package/es/rrweb/packages/rrweb/src/plugins/console/replay/index.js +88 -105
  53. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/record/index.js +19 -20
  54. package/es/rrweb/packages/rrweb/src/plugins/sequential-id/replay/index.js +25 -25
  55. package/es/rrweb/packages/rrweb/src/record/iframe-manager.js +29 -30
  56. package/es/rrweb/packages/rrweb/src/record/index.js +348 -373
  57. package/es/rrweb/packages/rrweb/src/record/mutation.js +487 -528
  58. package/es/rrweb/packages/rrweb/src/record/observer.js +584 -659
  59. package/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js +44 -73
  60. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js +166 -87
  61. package/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js +21 -26
  62. package/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js +119 -112
  63. package/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js +53 -72
  64. package/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js +38 -40
  65. package/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js +31 -0
  66. package/es/rrweb/packages/rrweb/src/replay/canvas/2d.js +27 -23
  67. package/es/rrweb/packages/rrweb/src/replay/canvas/deserialize-args.js +67 -0
  68. package/es/rrweb/packages/rrweb/src/replay/canvas/index.js +37 -29
  69. package/es/rrweb/packages/rrweb/src/replay/canvas/webgl.js +58 -120
  70. package/es/rrweb/packages/rrweb/src/replay/index.js +1545 -1854
  71. package/es/rrweb/packages/rrweb/src/replay/machine.js +275 -315
  72. package/es/rrweb/packages/rrweb/src/replay/smoothscroll.js +216 -218
  73. package/es/rrweb/packages/rrweb/src/replay/styles/inject-style.js +7 -7
  74. package/es/rrweb/packages/rrweb/src/replay/timer.js +87 -91
  75. package/es/rrweb/packages/rrweb/src/types.js +72 -72
  76. package/es/rrweb/packages/rrweb/src/utils.js +312 -506
  77. package/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js +190 -72
  78. package/lib/plugins/console-record.js +469 -627
  79. package/lib/plugins/console-replay.js +198 -268
  80. package/lib/plugins/sequential-id-record.js +19 -20
  81. package/lib/plugins/sequential-id-replay.js +25 -25
  82. package/lib/record/rrweb-record-pack.js +184 -139
  83. package/lib/record/rrweb-record.js +2467 -2425
  84. package/lib/replay/rrweb-replay-unpack.css +1 -0
  85. package/lib/replay/rrweb-replay-unpack.js +3798 -3344
  86. package/lib/replay/rrweb-replay.css +1 -0
  87. package/lib/replay/rrweb-replay.js +3743 -3289
  88. package/lib/rrweb-all.css +1 -0
  89. package/lib/rrweb-all.js +6721 -6249
  90. package/lib/rrweb.css +1 -0
  91. package/lib/rrweb.js +6151 -5632
  92. package/package.json +14 -13
  93. package/typings/packer/base.d.ts +1 -1
  94. package/typings/plugins/console/record/index.d.ts +1 -1
  95. package/typings/plugins/console/record/stringify.d.ts +1 -1
  96. package/typings/plugins/sequential-id/record/index.d.ts +1 -1
  97. package/typings/plugins/sequential-id/replay/index.d.ts +1 -1
  98. package/typings/record/iframe-manager.d.ts +3 -3
  99. package/typings/record/index.d.ts +1 -1
  100. package/typings/record/mutation.d.ts +2 -1
  101. package/typings/record/observers/canvas/2d.d.ts +2 -1
  102. package/typings/record/observers/canvas/canvas-manager.d.ts +5 -2
  103. package/typings/record/observers/canvas/canvas.d.ts +1 -1
  104. package/typings/record/observers/canvas/serialize-args.d.ts +5 -5
  105. package/typings/record/observers/canvas/webgl.d.ts +2 -1
  106. package/typings/record/shadow-dom-manager.d.ts +2 -1
  107. package/typings/record/stylesheet-manager.d.ts +12 -0
  108. package/typings/record/workers/image-bitmap-data-url-worker.d.ts +5 -0
  109. package/typings/replay/canvas/2d.d.ts +3 -3
  110. package/typings/replay/canvas/deserialize-args.d.ts +7 -0
  111. package/typings/replay/canvas/index.d.ts +4 -3
  112. package/typings/replay/canvas/webgl.d.ts +3 -5
  113. package/typings/replay/index.d.ts +7 -10
  114. package/typings/types.d.ts +45 -17
  115. package/typings/utils.d.ts +17 -44
  116. package/es/rrweb/packages/rrweb/ext/tslib/tslib.es6.js +0 -78
  117. package/es/rrweb/packages/rrweb/src/replay/virtual-styles.js +0 -121
  118. package/typings/replay/virtual-styles.d.ts +0 -43
@@ -1,381 +1,356 @@
1
- import { __assign, __read, __values } from '../../ext/tslib/tslib.es6.js';
2
- import { snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
1
+ import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';
3
2
  import { initObservers, mutationBuffers } from './observer.js';
4
- import { polyfill, on, createMirror, getWindowWidth, getWindowHeight, isIframeINode, hasShadowRoot } from '../utils.js';
3
+ import { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, hasShadowRoot } from '../utils.js';
5
4
  import { EventType, IncrementalSource } from '../types.js';
6
5
  import { IframeManager } from './iframe-manager.js';
7
6
  import { ShadowDomManager } from './shadow-dom-manager.js';
8
7
  import { CanvasManager } from './observers/canvas/canvas-manager.js';
8
+ import { StylesheetManager } from './stylesheet-manager.js';
9
9
 
10
- function wrapEvent(e) {
11
- return __assign(__assign({}, e), { timestamp: Date.now() });
12
- }
13
- var wrappedEmit;
14
- var takeFullSnapshot;
15
- var mirror = createMirror();
16
- function record(options) {
17
- if (options === void 0) { options = {}; }
18
- var emit = options.emit, checkoutEveryNms = options.checkoutEveryNms, checkoutEveryNth = options.checkoutEveryNth, _a = options.blockClass, blockClass = _a === void 0 ? 'highlight-block' : _a, _b = options.blockSelector, blockSelector = _b === void 0 ? null : _b, _c = options.ignoreClass, ignoreClass = _c === void 0 ? 'highlight-ignore' : _c, _d = options.maskTextClass, maskTextClass = _d === void 0 ? 'highlight-mask' : _d, _e = options.maskTextSelector, maskTextSelector = _e === void 0 ? null : _e, _f = options.inlineStylesheet, inlineStylesheet = _f === void 0 ? true : _f, maskAllInputs = options.maskAllInputs, _maskInputOptions = options.maskInputOptions, _slimDOMOptions = options.slimDOMOptions, maskInputFn = options.maskInputFn, maskTextFn = options.maskTextFn, hooks = options.hooks, packFn = options.packFn, _g = options.sampling, sampling = _g === void 0 ? {} : _g, mousemoveWait = options.mousemoveWait, _h = options.recordCanvas, recordCanvas = _h === void 0 ? false : _h, _j = options.userTriggeredOnInput, userTriggeredOnInput = _j === void 0 ? false : _j, _k = options.collectFonts, collectFonts = _k === void 0 ? false : _k, _l = options.inlineImages, inlineImages = _l === void 0 ? false : _l, plugins = options.plugins, _m = options.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m, _o = options.enableStrictPrivacy, enableStrictPrivacy = _o === void 0 ? false : _o;
19
- if (!emit) {
20
- throw new Error('emit function is required');
21
- }
22
- if (mousemoveWait !== undefined && sampling.mousemove === undefined) {
23
- sampling.mousemove = mousemoveWait;
24
- }
25
- var maskInputOptions = maskAllInputs === true
26
- ? {
27
- color: true,
28
- date: true,
29
- 'datetime-local': true,
30
- email: true,
31
- month: true,
32
- number: true,
33
- range: true,
34
- search: true,
35
- tel: true,
36
- text: true,
37
- time: true,
38
- url: true,
39
- week: true,
40
- textarea: true,
41
- select: true,
42
- password: true,
43
- }
44
- : _maskInputOptions !== undefined
45
- ? _maskInputOptions
46
- : { password: true };
47
- var slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'
48
- ? {
49
- script: true,
50
- comment: true,
51
- headFavicon: true,
52
- headWhitespace: true,
53
- headMetaSocial: true,
54
- headMetaRobots: true,
55
- headMetaHttpEquiv: true,
56
- headMetaVerification: true,
57
- headMetaAuthorship: _slimDOMOptions === 'all',
58
- headMetaDescKeywords: _slimDOMOptions === 'all',
59
- }
60
- : _slimDOMOptions
61
- ? _slimDOMOptions
62
- : {};
63
- polyfill();
64
- var lastFullSnapshotEvent;
65
- var incrementalSnapshotCount = 0;
66
- var eventProcessor = function (e) {
67
- var e_1, _a;
68
- try {
69
- for (var _b = __values(plugins || []), _c = _b.next(); !_c.done; _c = _b.next()) {
70
- var plugin = _c.value;
71
- if (plugin.eventProcessor) {
72
- e = plugin.eventProcessor(e);
73
- }
74
- }
75
- }
76
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
77
- finally {
78
- try {
79
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
80
- }
81
- finally { if (e_1) throw e_1.error; }
82
- }
83
- if (packFn) {
84
- e = packFn(e);
85
- }
86
- return e;
87
- };
88
- wrappedEmit = function (e, isCheckout) {
89
- var _a;
90
- if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&
91
- e.type !== EventType.FullSnapshot &&
92
- !(e.type === EventType.IncrementalSnapshot &&
93
- e.data.source === IncrementalSource.Mutation)) {
94
- mutationBuffers.forEach(function (buf) { return buf.unfreeze(); });
95
- }
96
- emit(eventProcessor(e), isCheckout);
97
- if (e.type === EventType.FullSnapshot) {
98
- lastFullSnapshotEvent = e;
99
- incrementalSnapshotCount = 0;
100
- }
101
- else if (e.type === EventType.IncrementalSnapshot) {
102
- if (e.data.source === IncrementalSource.Mutation &&
103
- e.data.isAttachIframe) {
104
- return;
105
- }
106
- incrementalSnapshotCount++;
107
- var exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
108
- var exceedTime = checkoutEveryNms &&
109
- e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
110
- if (exceedCount || exceedTime) {
111
- takeFullSnapshot(true);
112
- }
113
- }
114
- };
115
- var wrappedMutationEmit = function (m) {
116
- wrappedEmit(wrapEvent({
117
- type: EventType.IncrementalSnapshot,
118
- data: __assign({ source: IncrementalSource.Mutation }, m),
119
- }));
120
- };
121
- var wrappedScrollEmit = function (p) {
122
- return wrappedEmit(wrapEvent({
123
- type: EventType.IncrementalSnapshot,
124
- data: __assign({ source: IncrementalSource.Scroll }, p),
125
- }));
126
- };
127
- var wrappedCanvasMutationEmit = function (p) {
128
- return wrappedEmit(wrapEvent({
129
- type: EventType.IncrementalSnapshot,
130
- data: __assign({ source: IncrementalSource.CanvasMutation }, p),
131
- }));
132
- };
133
- var iframeManager = new IframeManager({
134
- mutationCb: wrappedMutationEmit,
135
- });
136
- var canvasManager = new CanvasManager({
137
- recordCanvas: recordCanvas,
138
- mutationCb: wrappedCanvasMutationEmit,
139
- win: window,
140
- blockClass: blockClass,
141
- mirror: mirror,
142
- });
143
- var shadowDomManager = new ShadowDomManager({
144
- mutationCb: wrappedMutationEmit,
145
- scrollCb: wrappedScrollEmit,
146
- bypassOptions: {
147
- blockClass: blockClass,
148
- blockSelector: blockSelector,
149
- maskTextClass: maskTextClass,
150
- maskTextSelector: maskTextSelector,
151
- inlineStylesheet: inlineStylesheet,
152
- maskInputOptions: maskInputOptions,
153
- maskTextFn: maskTextFn,
154
- maskInputFn: maskInputFn,
155
- recordCanvas: recordCanvas,
156
- inlineImages: inlineImages,
157
- sampling: sampling,
158
- slimDOMOptions: slimDOMOptions,
159
- iframeManager: iframeManager,
160
- canvasManager: canvasManager,
161
- enableStrictPrivacy: enableStrictPrivacy
162
- },
163
- mirror: mirror,
164
- });
165
- takeFullSnapshot = function (isCheckout) {
166
- var _a, _b, _c, _d;
167
- if (isCheckout === void 0) { isCheckout = false; }
168
- wrappedEmit(wrapEvent({
169
- type: EventType.Meta,
170
- data: {
171
- href: window.location.href,
172
- width: getWindowWidth(),
173
- height: getWindowHeight(),
174
- },
175
- }), isCheckout);
176
- mutationBuffers.forEach(function (buf) { return buf.lock(); });
177
- var _e = __read(snapshot(document, {
178
- blockClass: blockClass,
179
- blockSelector: blockSelector,
180
- maskTextClass: maskTextClass,
181
- maskTextSelector: maskTextSelector,
182
- inlineStylesheet: inlineStylesheet,
183
- maskAllInputs: maskInputOptions,
184
- maskTextFn: maskTextFn,
185
- slimDOM: slimDOMOptions,
186
- recordCanvas: recordCanvas,
187
- inlineImages: inlineImages,
188
- enableStrictPrivacy: enableStrictPrivacy,
189
- onSerialize: function (n) {
190
- if (isIframeINode(n)) {
191
- iframeManager.addIframe(n);
192
- }
193
- if (hasShadowRoot(n)) {
194
- shadowDomManager.addShadowRoot(n.shadowRoot, document);
195
- }
196
- },
197
- onIframeLoad: function (iframe, childSn) {
198
- iframeManager.attachIframe(iframe, childSn);
199
- shadowDomManager.observeAttachShadow(iframe);
200
- },
201
- keepIframeSrcFn: keepIframeSrcFn,
202
- }), 2), node = _e[0], idNodeMap = _e[1];
203
- if (!node) {
204
- return console.warn('Failed to snapshot the document');
205
- }
206
- mirror.map = idNodeMap;
207
- wrappedEmit(wrapEvent({
208
- type: EventType.FullSnapshot,
209
- data: {
210
- node: node,
211
- initialOffset: {
212
- left: window.pageXOffset !== undefined
213
- ? window.pageXOffset
214
- : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||
215
- ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||
216
- (document === null || document === void 0 ? void 0 : document.body.scrollLeft) ||
217
- 0,
218
- top: window.pageYOffset !== undefined
219
- ? window.pageYOffset
220
- : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||
221
- ((_d = (_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.parentElement) === null || _d === void 0 ? void 0 : _d.scrollTop) ||
222
- (document === null || document === void 0 ? void 0 : document.body.scrollTop) ||
223
- 0,
224
- },
225
- },
226
- }));
227
- mutationBuffers.forEach(function (buf) { return buf.unlock(); });
228
- };
229
- try {
230
- var handlers_1 = [];
231
- handlers_1.push(on('DOMContentLoaded', function () {
232
- wrappedEmit(wrapEvent({
233
- type: EventType.DomContentLoaded,
234
- data: {},
235
- }));
236
- }));
237
- var observe_1 = function (doc) {
238
- var _a;
239
- return initObservers({
240
- mutationCb: wrappedMutationEmit,
241
- mousemoveCb: function (positions, source) {
242
- return wrappedEmit(wrapEvent({
243
- type: EventType.IncrementalSnapshot,
244
- data: {
245
- source: source,
246
- positions: positions,
247
- },
248
- }));
249
- },
250
- mouseInteractionCb: function (d) {
251
- return wrappedEmit(wrapEvent({
252
- type: EventType.IncrementalSnapshot,
253
- data: __assign({ source: IncrementalSource.MouseInteraction }, d),
254
- }));
255
- },
256
- scrollCb: wrappedScrollEmit,
257
- viewportResizeCb: function (d) {
258
- return wrappedEmit(wrapEvent({
259
- type: EventType.IncrementalSnapshot,
260
- data: __assign({ source: IncrementalSource.ViewportResize }, d),
261
- }));
262
- },
263
- inputCb: function (v) {
264
- return wrappedEmit(wrapEvent({
265
- type: EventType.IncrementalSnapshot,
266
- data: __assign({ source: IncrementalSource.Input }, v),
267
- }));
268
- },
269
- mediaInteractionCb: function (p) {
270
- return wrappedEmit(wrapEvent({
271
- type: EventType.IncrementalSnapshot,
272
- data: __assign({ source: IncrementalSource.MediaInteraction }, p),
273
- }));
274
- },
275
- styleSheetRuleCb: function (r) {
276
- return wrappedEmit(wrapEvent({
277
- type: EventType.IncrementalSnapshot,
278
- data: __assign({ source: IncrementalSource.StyleSheetRule }, r),
279
- }));
280
- },
281
- styleDeclarationCb: function (r) {
282
- return wrappedEmit(wrapEvent({
283
- type: EventType.IncrementalSnapshot,
284
- data: __assign({ source: IncrementalSource.StyleDeclaration }, r),
285
- }));
286
- },
287
- canvasMutationCb: wrappedCanvasMutationEmit,
288
- fontCb: function (p) {
289
- return wrappedEmit(wrapEvent({
290
- type: EventType.IncrementalSnapshot,
291
- data: __assign({ source: IncrementalSource.Font }, p),
292
- }));
293
- },
294
- blockClass: blockClass,
295
- ignoreClass: ignoreClass,
296
- maskTextClass: maskTextClass,
297
- maskTextSelector: maskTextSelector,
298
- maskInputOptions: maskInputOptions,
299
- inlineStylesheet: inlineStylesheet,
300
- sampling: sampling,
301
- recordCanvas: recordCanvas,
302
- inlineImages: inlineImages,
303
- userTriggeredOnInput: userTriggeredOnInput,
304
- collectFonts: collectFonts,
305
- doc: doc,
306
- maskInputFn: maskInputFn,
307
- maskTextFn: maskTextFn,
308
- blockSelector: blockSelector,
309
- slimDOMOptions: slimDOMOptions,
310
- mirror: mirror,
311
- iframeManager: iframeManager,
312
- shadowDomManager: shadowDomManager,
313
- canvasManager: canvasManager,
314
- enableStrictPrivacy: enableStrictPrivacy,
315
- plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter(function (p) { return p.observer; })) === null || _a === void 0 ? void 0 : _a.map(function (p) { return ({
316
- observer: p.observer,
317
- options: p.options,
318
- callback: function (payload) {
319
- return wrappedEmit(wrapEvent({
320
- type: EventType.Plugin,
321
- data: {
322
- plugin: p.name,
323
- payload: payload,
324
- },
325
- }));
326
- },
327
- }); })) || [],
328
- }, hooks);
329
- };
330
- iframeManager.addLoadListener(function (iframeEl) {
331
- handlers_1.push(observe_1(iframeEl.contentDocument));
332
- });
333
- var init_1 = function () {
334
- takeFullSnapshot();
335
- handlers_1.push(observe_1(document));
336
- };
337
- if (document.readyState === 'interactive' ||
338
- document.readyState === 'complete') {
339
- init_1();
340
- }
341
- else {
342
- handlers_1.push(on('load', function () {
343
- wrappedEmit(wrapEvent({
344
- type: EventType.Load,
345
- data: {},
346
- }));
347
- init_1();
348
- }, window));
349
- }
350
- return function () {
351
- handlers_1.forEach(function (h) { return h(); });
352
- };
353
- }
354
- catch (error) {
355
- console.warn(error);
356
- }
357
- }
358
- record.addCustomEvent = function (tag, payload) {
359
- if (!wrappedEmit) {
360
- return;
361
- }
362
- wrappedEmit(wrapEvent({
363
- type: EventType.Custom,
364
- data: {
365
- tag: tag,
366
- payload: payload,
367
- },
368
- }));
369
- };
370
- record.freezePage = function () {
371
- mutationBuffers.forEach(function (buf) { return buf.freeze(); });
372
- };
373
- record.takeFullSnapshot = function (isCheckout) {
374
- if (!takeFullSnapshot) {
375
- throw new Error('please take full snapshot after start recording');
376
- }
377
- takeFullSnapshot(isCheckout);
378
- };
10
+ function wrapEvent(e) {
11
+ return Object.assign(Object.assign({}, e), { timestamp: Date.now() });
12
+ }
13
+ let wrappedEmit;
14
+ let takeFullSnapshot;
15
+ const mirror = createMirror();
16
+ function record(options = {}) {
17
+ const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'highlight-block', blockSelector = null, ignoreClass = 'highlight-ignore', maskTextClass = 'highlight-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, mousemoveWait, recordCanvas = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, enableStrictPrivacy = false, } = options;
18
+ if (!emit) {
19
+ throw new Error('emit function is required');
20
+ }
21
+ if (mousemoveWait !== undefined && sampling.mousemove === undefined) {
22
+ sampling.mousemove = mousemoveWait;
23
+ }
24
+ mirror.reset();
25
+ const maskInputOptions = maskAllInputs === true
26
+ ? {
27
+ color: true,
28
+ date: true,
29
+ 'datetime-local': true,
30
+ email: true,
31
+ month: true,
32
+ number: true,
33
+ range: true,
34
+ search: true,
35
+ tel: true,
36
+ text: true,
37
+ time: true,
38
+ url: true,
39
+ week: true,
40
+ textarea: true,
41
+ select: true,
42
+ password: true,
43
+ }
44
+ : _maskInputOptions !== undefined
45
+ ? _maskInputOptions
46
+ : { password: true };
47
+ const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'
48
+ ? {
49
+ script: true,
50
+ comment: true,
51
+ headFavicon: true,
52
+ headWhitespace: true,
53
+ headMetaSocial: true,
54
+ headMetaRobots: true,
55
+ headMetaHttpEquiv: true,
56
+ headMetaVerification: true,
57
+ headMetaAuthorship: _slimDOMOptions === 'all',
58
+ headMetaDescKeywords: _slimDOMOptions === 'all',
59
+ }
60
+ : _slimDOMOptions
61
+ ? _slimDOMOptions
62
+ : {};
63
+ polyfill();
64
+ let lastFullSnapshotEvent;
65
+ let incrementalSnapshotCount = 0;
66
+ const eventProcessor = (e) => {
67
+ for (const plugin of plugins || []) {
68
+ if (plugin.eventProcessor) {
69
+ e = plugin.eventProcessor(e);
70
+ }
71
+ }
72
+ if (packFn) {
73
+ e = packFn(e);
74
+ }
75
+ return e;
76
+ };
77
+ wrappedEmit = (e, isCheckout) => {
78
+ var _a;
79
+ if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&
80
+ e.type !== EventType.FullSnapshot &&
81
+ !(e.type === EventType.IncrementalSnapshot &&
82
+ e.data.source === IncrementalSource.Mutation)) {
83
+ mutationBuffers.forEach((buf) => buf.unfreeze());
84
+ }
85
+ emit(eventProcessor(e), isCheckout);
86
+ if (e.type === EventType.FullSnapshot) {
87
+ lastFullSnapshotEvent = e;
88
+ incrementalSnapshotCount = 0;
89
+ }
90
+ else if (e.type === EventType.IncrementalSnapshot) {
91
+ if (e.data.source === IncrementalSource.Mutation &&
92
+ e.data.isAttachIframe) {
93
+ return;
94
+ }
95
+ incrementalSnapshotCount++;
96
+ const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;
97
+ const exceedTime = checkoutEveryNms &&
98
+ e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;
99
+ if (exceedCount || exceedTime) {
100
+ takeFullSnapshot(true);
101
+ }
102
+ }
103
+ };
104
+ const wrappedMutationEmit = (m) => {
105
+ wrappedEmit(wrapEvent({
106
+ type: EventType.IncrementalSnapshot,
107
+ data: Object.assign({ source: IncrementalSource.Mutation }, m),
108
+ }));
109
+ };
110
+ const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({
111
+ type: EventType.IncrementalSnapshot,
112
+ data: Object.assign({ source: IncrementalSource.Scroll }, p),
113
+ }));
114
+ const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({
115
+ type: EventType.IncrementalSnapshot,
116
+ data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),
117
+ }));
118
+ const iframeManager = new IframeManager({
119
+ mutationCb: wrappedMutationEmit,
120
+ });
121
+ const stylesheetManager = new StylesheetManager({
122
+ mutationCb: wrappedMutationEmit,
123
+ });
124
+ const canvasManager = new CanvasManager({
125
+ recordCanvas,
126
+ mutationCb: wrappedCanvasMutationEmit,
127
+ win: window,
128
+ blockClass,
129
+ mirror,
130
+ sampling: sampling.canvas,
131
+ });
132
+ const shadowDomManager = new ShadowDomManager({
133
+ mutationCb: wrappedMutationEmit,
134
+ scrollCb: wrappedScrollEmit,
135
+ bypassOptions: {
136
+ blockClass,
137
+ blockSelector,
138
+ maskTextClass,
139
+ maskTextSelector,
140
+ inlineStylesheet,
141
+ maskInputOptions,
142
+ maskTextFn,
143
+ maskInputFn,
144
+ recordCanvas,
145
+ inlineImages,
146
+ sampling,
147
+ slimDOMOptions,
148
+ iframeManager,
149
+ stylesheetManager,
150
+ canvasManager,
151
+ enableStrictPrivacy
152
+ },
153
+ mirror,
154
+ });
155
+ takeFullSnapshot = (isCheckout = false) => {
156
+ var _a, _b, _c, _d;
157
+ wrappedEmit(wrapEvent({
158
+ type: EventType.Meta,
159
+ data: {
160
+ href: window.location.href,
161
+ width: getWindowWidth(),
162
+ height: getWindowHeight(),
163
+ },
164
+ }), isCheckout);
165
+ mutationBuffers.forEach((buf) => buf.lock());
166
+ const node = snapshot(document, {
167
+ mirror,
168
+ blockClass,
169
+ blockSelector,
170
+ maskTextClass,
171
+ maskTextSelector,
172
+ inlineStylesheet,
173
+ maskAllInputs: maskInputOptions,
174
+ maskTextFn,
175
+ slimDOM: slimDOMOptions,
176
+ recordCanvas,
177
+ inlineImages,
178
+ enableStrictPrivacy,
179
+ onSerialize: (n) => {
180
+ if (isSerializedIframe(n, mirror)) {
181
+ iframeManager.addIframe(n);
182
+ }
183
+ if (hasShadowRoot(n)) {
184
+ shadowDomManager.addShadowRoot(n.shadowRoot, document);
185
+ }
186
+ },
187
+ onIframeLoad: (iframe, childSn) => {
188
+ iframeManager.attachIframe(iframe, childSn, mirror);
189
+ shadowDomManager.observeAttachShadow(iframe);
190
+ },
191
+ onStylesheetLoad: (linkEl, childSn) => {
192
+ this.stylesheetManager.attachStylesheet(linkEl, childSn, this.mirror);
193
+ },
194
+ keepIframeSrcFn,
195
+ });
196
+ if (!node) {
197
+ return console.warn('Failed to snapshot the document');
198
+ }
199
+ wrappedEmit(wrapEvent({
200
+ type: EventType.FullSnapshot,
201
+ data: {
202
+ node,
203
+ initialOffset: {
204
+ left: window.pageXOffset !== undefined
205
+ ? window.pageXOffset
206
+ : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||
207
+ ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||
208
+ (document === null || document === void 0 ? void 0 : document.body.scrollLeft) ||
209
+ 0,
210
+ top: window.pageYOffset !== undefined
211
+ ? window.pageYOffset
212
+ : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||
213
+ ((_d = (_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.parentElement) === null || _d === void 0 ? void 0 : _d.scrollTop) ||
214
+ (document === null || document === void 0 ? void 0 : document.body.scrollTop) ||
215
+ 0,
216
+ },
217
+ },
218
+ }));
219
+ mutationBuffers.forEach((buf) => buf.unlock());
220
+ };
221
+ try {
222
+ const handlers = [];
223
+ handlers.push(on('DOMContentLoaded', () => {
224
+ wrappedEmit(wrapEvent({
225
+ type: EventType.DomContentLoaded,
226
+ data: {},
227
+ }));
228
+ }));
229
+ const observe = (doc) => {
230
+ var _a;
231
+ return initObservers({
232
+ mutationCb: wrappedMutationEmit,
233
+ mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({
234
+ type: EventType.IncrementalSnapshot,
235
+ data: {
236
+ source,
237
+ positions,
238
+ },
239
+ })),
240
+ mouseInteractionCb: (d) => wrappedEmit(wrapEvent({
241
+ type: EventType.IncrementalSnapshot,
242
+ data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),
243
+ })),
244
+ scrollCb: wrappedScrollEmit,
245
+ viewportResizeCb: (d) => wrappedEmit(wrapEvent({
246
+ type: EventType.IncrementalSnapshot,
247
+ data: Object.assign({ source: IncrementalSource.ViewportResize }, d),
248
+ })),
249
+ inputCb: (v) => wrappedEmit(wrapEvent({
250
+ type: EventType.IncrementalSnapshot,
251
+ data: Object.assign({ source: IncrementalSource.Input }, v),
252
+ })),
253
+ mediaInteractionCb: (p) => wrappedEmit(wrapEvent({
254
+ type: EventType.IncrementalSnapshot,
255
+ data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),
256
+ })),
257
+ styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({
258
+ type: EventType.IncrementalSnapshot,
259
+ data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),
260
+ })),
261
+ styleDeclarationCb: (r) => wrappedEmit(wrapEvent({
262
+ type: EventType.IncrementalSnapshot,
263
+ data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),
264
+ })),
265
+ canvasMutationCb: wrappedCanvasMutationEmit,
266
+ fontCb: (p) => wrappedEmit(wrapEvent({
267
+ type: EventType.IncrementalSnapshot,
268
+ data: Object.assign({ source: IncrementalSource.Font }, p),
269
+ })),
270
+ blockClass,
271
+ ignoreClass,
272
+ maskTextClass,
273
+ maskTextSelector,
274
+ maskInputOptions,
275
+ inlineStylesheet,
276
+ sampling,
277
+ recordCanvas,
278
+ inlineImages,
279
+ userTriggeredOnInput,
280
+ collectFonts,
281
+ doc,
282
+ maskInputFn,
283
+ maskTextFn,
284
+ blockSelector,
285
+ slimDOMOptions,
286
+ mirror,
287
+ iframeManager,
288
+ stylesheetManager,
289
+ shadowDomManager,
290
+ canvasManager,
291
+ enableStrictPrivacy,
292
+ plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({
293
+ observer: p.observer,
294
+ options: p.options,
295
+ callback: (payload) => wrappedEmit(wrapEvent({
296
+ type: EventType.Plugin,
297
+ data: {
298
+ plugin: p.name,
299
+ payload,
300
+ },
301
+ })),
302
+ }))) || [],
303
+ }, hooks);
304
+ };
305
+ iframeManager.addLoadListener((iframeEl) => {
306
+ handlers.push(observe(iframeEl.contentDocument));
307
+ });
308
+ const init = () => {
309
+ takeFullSnapshot();
310
+ handlers.push(observe(document));
311
+ };
312
+ if (document.readyState === 'interactive' ||
313
+ document.readyState === 'complete') {
314
+ init();
315
+ }
316
+ else {
317
+ handlers.push(on('load', () => {
318
+ wrappedEmit(wrapEvent({
319
+ type: EventType.Load,
320
+ data: {},
321
+ }));
322
+ init();
323
+ }, window));
324
+ }
325
+ return () => {
326
+ handlers.forEach((h) => h());
327
+ };
328
+ }
329
+ catch (error) {
330
+ console.warn(error);
331
+ }
332
+ }
333
+ record.addCustomEvent = (tag, payload) => {
334
+ if (!wrappedEmit) {
335
+ return;
336
+ }
337
+ wrappedEmit(wrapEvent({
338
+ type: EventType.Custom,
339
+ data: {
340
+ tag,
341
+ payload,
342
+ },
343
+ }));
344
+ };
345
+ record.freezePage = () => {
346
+ mutationBuffers.forEach((buf) => buf.freeze());
347
+ };
348
+ record.takeFullSnapshot = (isCheckout) => {
349
+ if (!takeFullSnapshot) {
350
+ throw new Error('please take full snapshot after start recording');
351
+ }
352
+ takeFullSnapshot(isCheckout);
353
+ };
379
354
  record.mirror = mirror;
380
355
 
381
- export default record;
356
+ export { record as default };