60 lines
1.6 KiB
TypeScript
60 lines
1.6 KiB
TypeScript
import {
|
|
mutationCallBack,
|
|
blockClass,
|
|
maskTextClass,
|
|
MaskTextFn,
|
|
Mirror,
|
|
} from '../types';
|
|
import { MaskInputOptions, SlimDOMOptions } from 'rrweb-snapshot';
|
|
import { IframeManager } from './iframe-manager';
|
|
import { initMutationObserver } from './observer';
|
|
|
|
type BypassOptions = {
|
|
blockClass: blockClass;
|
|
blockSelector: string | null;
|
|
maskTextClass: maskTextClass;
|
|
maskTextSelector: string | null;
|
|
inlineStylesheet: boolean;
|
|
maskInputOptions: MaskInputOptions;
|
|
maskTextFn: MaskTextFn | undefined;
|
|
recordCanvas: boolean;
|
|
slimDOMOptions: SlimDOMOptions;
|
|
iframeManager: IframeManager;
|
|
};
|
|
|
|
export class ShadowDomManager {
|
|
private mutationCb: mutationCallBack;
|
|
private bypassOptions: BypassOptions;
|
|
private mirror: Mirror;
|
|
|
|
constructor(options: {
|
|
mutationCb: mutationCallBack;
|
|
bypassOptions: BypassOptions;
|
|
mirror: Mirror;
|
|
}) {
|
|
this.mutationCb = options.mutationCb;
|
|
this.bypassOptions = options.bypassOptions;
|
|
this.mirror = options.mirror;
|
|
}
|
|
|
|
public addShadowRoot(shadowRoot: ShadowRoot, doc: Document) {
|
|
initMutationObserver(
|
|
this.mutationCb,
|
|
doc,
|
|
this.bypassOptions.blockClass,
|
|
this.bypassOptions.blockSelector,
|
|
this.bypassOptions.maskTextClass,
|
|
this.bypassOptions.maskTextSelector,
|
|
this.bypassOptions.inlineStylesheet,
|
|
this.bypassOptions.maskInputOptions,
|
|
this.bypassOptions.maskTextFn,
|
|
this.bypassOptions.recordCanvas,
|
|
this.bypassOptions.slimDOMOptions,
|
|
this.mirror,
|
|
this.bypassOptions.iframeManager,
|
|
this,
|
|
shadowRoot,
|
|
);
|
|
}
|
|
}
|