@highlight-run/rrweb 1.1.6 → 1.1.7

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.
@@ -1,6 +1,7 @@
1
1
  import { MaskInputOptions, SlimDOMOptions, MaskTextFn, MaskInputFn } from '../snapshot';
2
2
  import { mutationRecord, blockClass, maskTextClass, mutationCallBack, Mirror } from '../types';
3
3
  import { IframeManager } from './iframe-manager';
4
+ import { CanvasManager } from './observers/canvas/canvas-manager';
4
5
  import { ShadowDomManager } from './shadow-dom-manager';
5
6
  export default class MutationBuffer {
6
7
  private frozen;
@@ -29,12 +30,14 @@ export default class MutationBuffer {
29
30
  private mirror;
30
31
  private iframeManager;
31
32
  private shadowDomManager;
32
- init(cb: mutationCallBack, blockClass: blockClass, blockSelector: string | null, maskTextClass: maskTextClass, maskTextSelector: string | null, inlineStylesheet: boolean, maskInputOptions: MaskInputOptions, maskTextFn: MaskTextFn | undefined, maskInputFn: MaskInputFn | undefined, recordCanvas: boolean, slimDOMOptions: SlimDOMOptions, doc: Document, mirror: Mirror, iframeManager: IframeManager, shadowDomManager: ShadowDomManager, enableStrictPrivacy: boolean): void;
33
+ private canvasManager;
34
+ init(cb: mutationCallBack, blockClass: blockClass, blockSelector: string | null, maskTextClass: maskTextClass, maskTextSelector: string | null, inlineStylesheet: boolean, maskInputOptions: MaskInputOptions, maskTextFn: MaskTextFn | undefined, maskInputFn: MaskInputFn | undefined, recordCanvas: boolean, slimDOMOptions: SlimDOMOptions, doc: Document, mirror: Mirror, iframeManager: IframeManager, shadowDomManager: ShadowDomManager, canvasManager: CanvasManager, enableStrictPrivacy: boolean): void;
33
35
  freeze(): void;
34
36
  unfreeze(): void;
35
37
  isFrozen(): boolean;
36
38
  lock(): void;
37
39
  unlock(): void;
40
+ reset(): void;
38
41
  processMutations: (mutations: mutationRecord[]) => void;
39
42
  emit: () => void;
40
43
  private processMutation;
@@ -3,8 +3,9 @@ import { mutationCallBack, observerParam, listenerHandler, scrollCallback, block
3
3
  import MutationBuffer from './mutation';
4
4
  import { IframeManager } from './iframe-manager';
5
5
  import { ShadowDomManager } from './shadow-dom-manager';
6
+ import { CanvasManager } from './observers/canvas/canvas-manager';
6
7
  export declare const mutationBuffers: MutationBuffer[];
7
- export declare function initMutationObserver(cb: mutationCallBack, doc: Document, blockClass: blockClass, blockSelector: string | null, maskTextClass: maskTextClass, maskTextSelector: string | null, inlineStylesheet: boolean, maskInputOptions: MaskInputOptions, maskTextFn: MaskTextFn | undefined, maskInputFn: MaskInputFn | undefined, recordCanvas: boolean, slimDOMOptions: SlimDOMOptions, mirror: Mirror, iframeManager: IframeManager, shadowDomManager: ShadowDomManager, rootEl: Node, enableStrictPrivacy: boolean): MutationObserver;
8
+ export declare function initMutationObserver(cb: mutationCallBack, doc: Document, blockClass: blockClass, blockSelector: string | null, maskTextClass: maskTextClass, maskTextSelector: string | null, inlineStylesheet: boolean, maskInputOptions: MaskInputOptions, maskTextFn: MaskTextFn | undefined, maskInputFn: MaskInputFn | undefined, recordCanvas: boolean, slimDOMOptions: SlimDOMOptions, mirror: Mirror, iframeManager: IframeManager, shadowDomManager: ShadowDomManager, canvasManager: CanvasManager, rootEl: Node, enableStrictPrivacy: boolean): MutationObserver;
8
9
  export declare function initScrollObserver(cb: scrollCallback, doc: Document, mirror: Mirror, blockClass: blockClass, sampling: SamplingStrategy): listenerHandler;
9
10
  export declare const INPUT_TAGS: string[];
10
11
  export declare function initObservers(o: observerParam, hooks?: hooksParam): listenerHandler;
@@ -1,2 +1,2 @@
1
- import { blockClass, canvasMutationCallback, IWindow, listenerHandler, Mirror } from '../../../types';
2
- export default function initCanvas2DMutationObserver(cb: canvasMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
1
+ import { blockClass, canvasManagerMutationCallback, IWindow, listenerHandler, Mirror } from '../../../types';
2
+ export default function initCanvas2DMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
@@ -0,0 +1,32 @@
1
+ import { blockClass, canvasMutationCallback, IWindow, Mirror } from '../../../types';
2
+ export declare type RafStamps = {
3
+ latestId: number;
4
+ invokeId: number | null;
5
+ };
6
+ export declare class CanvasManager {
7
+ private pendingCanvasMutations;
8
+ private rafStamps;
9
+ private mirror;
10
+ private mutationCb;
11
+ private resetObservers;
12
+ private frozen;
13
+ private locked;
14
+ reset(): void;
15
+ freeze(): void;
16
+ unfreeze(): void;
17
+ lock(): void;
18
+ unlock(): void;
19
+ constructor(options: {
20
+ recordCanvas: boolean | number;
21
+ mutationCb: canvasMutationCallback;
22
+ win: IWindow;
23
+ blockClass: blockClass;
24
+ mirror: Mirror;
25
+ });
26
+ private processMutation;
27
+ private initCanvasMutationObserver;
28
+ private startPendingCanvasMutationFlusher;
29
+ private startRAFTimestamping;
30
+ flushPendingCanvasMutations(): void;
31
+ flushPendingCanvasMutationFor(canvas: HTMLCanvasElement, id: number): void;
32
+ }
@@ -1,2 +1,2 @@
1
- import { blockClass, canvasMutationCallback, IWindow, listenerHandler, Mirror } from '../../../types';
2
- export default function initCanvasWebGLMutationObserver(cb: canvasMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
1
+ import { blockClass, canvasManagerMutationCallback, IWindow, listenerHandler, Mirror } from '../../../types';
2
+ export default function initCanvasWebGLMutationObserver(cb: canvasManagerMutationCallback, win: IWindow, blockClass: blockClass, mirror: Mirror): listenerHandler;
@@ -1,6 +1,7 @@
1
1
  import { mutationCallBack, blockClass, maskTextClass, Mirror, scrollCallback, SamplingStrategy } from '../types';
2
2
  import { MaskInputOptions, SlimDOMOptions, MaskTextFn, MaskInputFn } from '../snapshot';
3
3
  import { IframeManager } from './iframe-manager';
4
+ import { CanvasManager } from './observers/canvas/canvas-manager';
4
5
  declare type BypassOptions = {
5
6
  blockClass: blockClass;
6
7
  blockSelector: string | null;
@@ -14,6 +15,7 @@ declare type BypassOptions = {
14
15
  sampling: SamplingStrategy;
15
16
  slimDOMOptions: SlimDOMOptions;
16
17
  iframeManager: IframeManager;
18
+ canvasManager: CanvasManager;
17
19
  enableStrictPrivacy: boolean;
18
20
  };
19
21
  export declare class ShadowDomManager {
@@ -8,3 +8,4 @@ export declare function maskInputValue({ maskInputOptions, tagName, type, value,
8
8
  value: string | null;
9
9
  maskInputFn?: MaskInputFn;
10
10
  }): string;
11
+ export declare function is2DCanvasBlank(canvas: HTMLCanvasElement): boolean;
package/dist/types.d.ts CHANGED
@@ -4,6 +4,7 @@ import { FontFaceDescriptors } from 'css-font-loading-module';
4
4
  import { IframeManager } from './record/iframe-manager';
5
5
  import { ShadowDomManager } from './record/shadow-dom-manager';
6
6
  import type { Replayer } from './replay';
7
+ import { CanvasManager } from './record/observers/canvas/canvas-manager';
7
8
  export declare enum EventType {
8
9
  DomContentLoaded = 0,
9
10
  Load = 1,
@@ -128,6 +129,7 @@ export declare type SamplingStrategy = Partial<{
128
129
  mousemoveCallback: number;
129
130
  mouseInteraction: boolean | Record<string, boolean | undefined>;
130
131
  scroll: number;
132
+ media: number;
131
133
  input: 'all' | 'last';
132
134
  }>;
133
135
  export declare type RecordPlugin<TOptions = unknown> = {
@@ -191,6 +193,7 @@ export declare type observerParam = {
191
193
  mirror: Mirror;
192
194
  iframeManager: IframeManager;
193
195
  shadowDomManager: ShadowDomManager;
196
+ canvasManager: CanvasManager;
194
197
  plugins: Array<{
195
198
  observer: Function;
196
199
  callback: Function;
@@ -345,7 +348,6 @@ export declare type styleDeclarationParam = {
345
348
  };
346
349
  };
347
350
  export declare type styleDeclarationCallback = (s: styleDeclarationParam) => void;
348
- export declare type canvasMutationCallback = (p: canvasMutationParam) => void;
349
351
  export declare type canvasMutationCommand = {
350
352
  property: string;
351
353
  args: Array<unknown>;
@@ -359,6 +361,11 @@ export declare type canvasMutationParam = {
359
361
  id: number;
360
362
  type: CanvasContext;
361
363
  } & canvasMutationCommand);
364
+ export declare type canvasMutationWithType = {
365
+ type: CanvasContext;
366
+ } & canvasMutationCommand;
367
+ export declare type canvasMutationCallback = (p: canvasMutationParam) => void;
368
+ export declare type canvasManagerMutationCallback = (target: HTMLCanvasElement, p: canvasMutationWithType) => void;
362
369
  export declare type fontParam = {
363
370
  family: string;
364
371
  fontSource: string;
@@ -382,12 +389,15 @@ export declare type inputCallback = (v: inputValue & {
382
389
  export declare const enum MediaInteractions {
383
390
  Play = 0,
384
391
  Pause = 1,
385
- Seeked = 2
392
+ Seeked = 2,
393
+ VolumeChange = 3
386
394
  }
387
395
  export declare type mediaInteractionParam = {
388
396
  type: MediaInteractions;
389
397
  id: number;
390
398
  currentTime?: number;
399
+ volume?: number;
400
+ muted?: boolean;
391
401
  };
392
402
  export declare type mediaInteractionCallback = (p: mediaInteractionParam) => void;
393
403
  export declare type DocumentDimension = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@highlight-run/rrweb",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "record and replay the web",
5
5
  "scripts": {
6
6
  "test": "npm run bundle:browser && cross-env TS_NODE_CACHE=false TS_NODE_FILES=true mocha -r ts-node/register -r ignore-styles -r jsdom-global/register test/**.test.ts",