@xysfe/memento-core
Version:
record and replay the web
424 lines (417 loc) • 12.2 kB
TypeScript
import { serializedNodeWithId, idNodeMap, INode, MaskInputOptions, BlockElement } from '@xysfe/memento-snapshot';
import { PackFn, UnpackFn } from './packer/base';
import { CanvasManager } from './record/observers/canvas/canvas-manager';
export declare enum EventType {
DomContentLoaded = 0,
Load = 1,
FullSnapshot = 2,
IncrementalSnapshot = 3,
Meta = 4,
PageChange = 5,
Custom = 9,
Other = 99
}
export declare type domContentLoadedEvent = {
type: EventType.DomContentLoaded;
data: {};
};
export declare type loadedEvent = {
type: EventType.Load;
data: {};
};
export declare type fullSnapshotEvent = {
type: EventType.FullSnapshot;
data: {
href: string;
width: number;
height: number;
ratio: number;
node: serializedNodeWithId;
initialOffset: {
top: number;
left: number;
};
};
tag?: string;
};
export declare type incrementalSnapshotEvent = {
type: EventType.IncrementalSnapshot;
data: incrementalData;
};
export declare type metaEvent = {
type: EventType.Meta;
data: {
href: string;
width: number;
height: number;
ratio: number;
};
};
export declare type pageEvent = {
type: EventType.PageChange;
data: {
url: string;
};
};
export declare type customEvent<T = unknown> = {
type: EventType.Custom;
data: {
tag: string;
payload: T;
};
};
export declare type OtherEvent<T = unknown> = {
type: EventType.Other;
data: any;
};
export declare type styleSheetEvent = {};
export declare enum IncrementalSource {
Mutation = 0,
MouseMove = 1,
MouseInteraction = 2,
Scroll = 3,
ViewportResize = 4,
Input = 5,
TouchMove = 6,
MediaInteraction = 7,
StyleSheetRule = 8,
CanvasMutation = 9
}
export declare enum OtherSource {
Console = 1,
Network = 2
}
export declare type mutationData = {
source: IncrementalSource.Mutation;
} & mutationCallbackParam;
export declare type mousemoveData = {
source: IncrementalSource.MouseMove | IncrementalSource.TouchMove;
positions: mousePosition[];
};
export declare type mouseInteractionData = {
source: IncrementalSource.MouseInteraction;
} & mouseInteractionParam;
export declare type scrollData = {
source: IncrementalSource.Scroll;
} & scrollPosition;
export declare type viewportResizeData = {
source: IncrementalSource.ViewportResize;
} & viewportResizeDimention;
export declare type inputData = {
source: IncrementalSource.Input;
id: number;
} & inputValue;
export declare type canvasMutationData = {
source: IncrementalSource.CanvasMutation;
} & canvasMutationParam;
export declare type mediaInteractionData = {
source: IncrementalSource.MediaInteraction;
} & mediaInteractionParam;
export declare type styleSheetRuleData = {
source: IncrementalSource.StyleSheetRule;
} & styleSheetRuleParam;
export declare type incrementalData = mutationData | mousemoveData | mouseInteractionData | scrollData | viewportResizeData | inputData | mediaInteractionData | styleSheetRuleData | canvasMutationData;
export declare type event = domContentLoadedEvent | loadedEvent | fullSnapshotEvent | incrementalSnapshotEvent | metaEvent | pageEvent | customEvent | OtherEvent;
export declare type eventWithTime = event & {
timestamp: number;
delay?: number;
};
export declare type blockClass = string | RegExp;
export declare type asyncClass = string | RegExp;
export declare type SamplingStrategy = Partial<{
mousemove: boolean | number;
mouseInteraction: boolean | Record<string, boolean | undefined>;
scroll: number;
input: 'all' | 'last';
canvas: 'all' | number;
}>;
export declare type recordOptions<T> = {
emit?: (e: T, isCheckout?: boolean) => void;
checkoutEveryNth?: number;
checkoutEveryNms?: number;
blockClass?: blockClass;
blockElements?: BlockElement[];
ignoreClass?: string;
ignoreMousemove?: boolean;
asyncClass?: asyncClass;
maskAllInputs?: boolean;
maskInputOptions?: MaskInputOptions;
inlineStylesheet?: boolean;
hooks?: hooksParam;
packFn?: PackFn;
sampling?: SamplingStrategy;
recordCanvas?: boolean;
mousemoveWait?: number;
onlyRecordFullSnapshot?: boolean;
};
export declare type observerParam = {
mutationCb: mutationCallBack;
mousemoveCb: mousemoveCallBack;
mouseInteractionCb: mouseInteractionCallBack;
scrollCb: scrollCallback;
viewportResizeCb: viewportResizeCallback;
inputCb: inputCallback;
mediaInteractionCb: mediaInteractionCallback;
blockClass: blockClass;
blockElements?: BlockElement[];
ignoreClass: string;
asyncClass?: asyncClass;
maskInputOptions: MaskInputOptions;
inlineStylesheet: boolean;
styleSheetRuleCb: styleSheetRuleCallback;
canvasMutationCb: canvasMutationCallback;
sampling: SamplingStrategy;
consoleCb?: any;
networkCb?: any;
canvasManager: CanvasManager;
};
export declare type hooksParam = {
mutation?: mutationCallBack;
mousemove?: mousemoveCallBack;
mouseInteraction?: mouseInteractionCallBack;
scroll?: scrollCallback;
viewportResize?: viewportResizeCallback;
input?: inputCallback;
mediaInteaction?: mediaInteractionCallback;
styleSheetRule?: styleSheetRuleCallback;
canvasMutation?: canvasMutationCallback;
console?: any;
network?: any;
};
export declare type mutationRecord = {
type: string;
target: Node;
oldValue: string | null;
addedNodes: NodeList;
removedNodes: NodeList;
attributeName: string | null;
};
export declare type textCursor = {
node: Node;
value: string | null;
};
export declare type textMutation = {
id: number;
value: string | null;
};
export declare type attributeCursor = {
node: Node;
attributes: {
[key: string]: string | null;
};
};
export declare type attributeMutation = {
id: number;
attributes: {
[key: string]: string | null;
};
};
export declare type removedNodeMutation = {
parentId: number;
id: number;
};
export declare type addedNodeMutation = {
parentId: number;
previousId?: number | null;
nextId: number | null;
node: serializedNodeWithId;
};
declare type mutationCallbackParam = {
texts: textMutation[];
attributes: attributeMutation[];
removes: removedNodeMutation[];
adds: addedNodeMutation[];
timestamp?: number;
};
export declare type mutationCallBack = (m: mutationCallbackParam) => void;
export declare type mousemoveCallBack = (p: mousePosition[], source: IncrementalSource.MouseMove | IncrementalSource.TouchMove) => void;
export declare type mousePosition = {
x: number;
y: number;
id: number;
timeOffset: number;
};
export declare enum MouseInteractions {
MouseUp = 0,
MouseDown = 1,
Click = 2,
ContextMenu = 3,
DblClick = 4,
Focus = 5,
Blur = 6,
TouchStart = 7,
TouchMove_Departed = 8,
TouchEnd = 9
}
export declare enum CanvasContext {
'2D' = 0,
WebGL = 1,
WebGL2 = 2
}
export declare type SerializedCanvasArg = {
rr_type: 'ArrayBuffer';
base64: string;
} | {
rr_type: 'Blob';
data: Array<CanvasArg>;
type?: string;
} | {
rr_type: string;
src: string;
} | {
rr_type: string;
args: Array<CanvasArg>;
} | {
rr_type: string;
index: number;
};
export declare type CanvasArg = SerializedCanvasArg | string | number | boolean | null | CanvasArg[];
declare type mouseInteractionParam = {
type: MouseInteractions;
id: number;
x: number;
y: number;
};
export declare type mouseInteractionCallBack = (d: mouseInteractionParam) => void;
export declare type scrollPosition = {
id: number;
x: number;
y: number;
};
export declare type scrollCallback = (p: scrollPosition) => void;
export declare type styleSheetAddRule = {
rule: string;
index?: number;
};
export declare type styleSheetDeleteRule = {
index: number;
};
export declare type styleSheetRuleParam = {
id: number;
removes?: styleSheetDeleteRule[];
adds?: styleSheetAddRule[];
};
export declare type styleSheetRuleCallback = (s: styleSheetRuleParam) => void;
export declare type viewportResizeDimention = {
width: number;
height: number;
rotate: number;
};
export declare type canvasMutationCommand = {
property: string;
args: Array<unknown>;
setter?: true;
};
export declare type canvasMutationParam = {
id: number;
type: CanvasContext;
commands: canvasMutationCommand[];
} | ({
id: number;
type: CanvasContext;
} & canvasMutationCommand);
export declare type canvasMutationWithType = {
type: CanvasContext;
} & canvasMutationCommand;
export declare type canvasMutationCallback = (p: canvasMutationParam) => void;
export declare type canvasManagerMutationCallback = (target: HTMLCanvasElement, p: canvasMutationWithType) => void;
export declare type viewportResizeCallback = (d: viewportResizeDimention) => void;
export declare type inputValue = {
text: string;
isChecked: boolean;
};
export declare type inputCallback = (v: inputValue & {
id: number;
}) => void;
export declare const enum MediaInteractions {
Play = 0,
Pause = 1
}
export declare type mediaInteractionParam = {
type: MediaInteractions;
id: number;
};
export declare type mediaInteractionCallback = (p: mediaInteractionParam) => void;
export declare type Mirror = {
map: idNodeMap;
getId: (n: INode) => number;
getNode: (id: number) => INode | null;
removeNodeFromMap: (n: INode) => void;
has: (id: number) => boolean;
};
export declare type throttleOptions = {
leading?: boolean;
trailing?: boolean;
};
export declare type listenerHandler = () => void;
export declare type hookResetter = () => void;
export declare type playerConfig = {
normalSpeed: number;
speed: number;
root: Element;
loadTimeout: number;
skipInactive: boolean;
forceSkipInactive: boolean;
showWarning: boolean;
showDebug: boolean;
blockClass: string;
liveMode: boolean;
insertStyleRules: string[];
triggerFocus: boolean;
UNSAFE_replayCanvas: boolean;
mouseTail:
| boolean
| {
duration?: number;
lineCap?: string;
lineWidth?: number;
strokeStyle?: string;
};
unpackFn?: UnpackFn;
mode: string;
cdnHttps?: boolean;
};
export declare type playerMetaData = {
startTime: number;
endTime: number;
totalTime: number;
};
export declare type missingNode = {
node: Node;
mutation: addedNodeMutation;
};
export declare type missingNodeMap = {
[id: number]: missingNode;
};
export declare type actionWithDelay = {
doAction: () => void;
delay: number;
};
export declare type Handler = (event?: unknown) => void;
export declare type Emitter = {
on(type: string, handler: Handler): void;
emit(type: string, event?: unknown): void;
};
export declare type Arguments<T> = T extends (...payload: infer U) => unknown ? U : unknown;
export declare enum ReplayerEvents {
Start = "start",
Pause = "pause",
Resume = "resume",
Resize = "resize",
Finish = "finish",
FullsnapshotRebuilded = "fullsnapshot-rebuilded",
LoadStylesheetStart = "load-stylesheet-start",
LoadStylesheetEnd = "load-stylesheet-end",
SkipStart = "skip-start",
SkipEnd = "skip-end",
MouseInteraction = "mouse-interaction",
EventCast = "event-cast",
CustomEvent = "custom-event",
Flush = "flush",
AddEvents = "add-events"
}
export declare type InjectStyle = {
blockClass: string;
mode: string;
};
export {};