From 3beb57273ebf2b0ecc35b5991dcc513fd5f4f587 Mon Sep 17 00:00:00 2001 From: Yanzhen Yu Date: Mon, 12 Aug 2019 21:26:35 +0800 Subject: [PATCH] Revert "temp revert #81" This reverts commit 835161c7377e3480c3f7c343c2dfedd297614117. --- src/index.ts | 4 ++-- src/record/index.ts | 15 +++++++++++++++ test/record.test.ts | 16 ++++++++++++++++ typings/index.d.ts | 4 ++-- typings/record/index.d.ts | 1 + 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 49d0c05239..ccc0e8e8bb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import record from './record'; +import record, { addCustomEvent } from './record'; import { Replayer } from './replay'; import { mirror } from './utils'; @@ -8,4 +8,4 @@ export { MouseInteractions, ReplayerEvents, } from './types'; -export { record, Replayer, mirror }; +export { record, addCustomEvent, Replayer, mirror }; diff --git a/src/record/index.ts b/src/record/index.ts index 72d87fe0be..3d1dd7fa05 100644 --- a/src/record/index.ts +++ b/src/record/index.ts @@ -25,6 +25,21 @@ function wrapEvent(e: event): eventWithTime { let wrappedEmit!: (e: eventWithTime, isCheckout?: boolean) => void; +export function addCustomEvent(tag: string, payload: T) { + if (!wrappedEmit) { + throw new Error('please add custom event after start recording'); + } + wrappedEmit( + wrapEvent({ + type: EventType.Custom, + data: { + tag, + payload, + }, + }), + ); +} + function record(options: recordOptions = {}): listenerHandler | undefined { const { emit, diff --git a/test/record.test.ts b/test/record.test.ts index ca56a6d094..e321314409 100644 --- a/test/record.test.ts +++ b/test/record.test.ts @@ -23,6 +23,7 @@ interface ISuite extends Suite { interface IWindow extends Window { rrweb: { record: (options: recordOptions) => listenerHandler | undefined; + addCustomEvent(tag: string, payload: T): void; }; emit: (e: eventWithTime) => undefined; } @@ -180,4 +181,19 @@ describe('record', function(this: ISuite) { await this.page.waitFor(50); assertSnapshot(this.events, __filename, 'async-checkout'); }); + + it('can add custom event', async () => { + await this.page.evaluate(() => { + const { record, addCustomEvent } = (window as IWindow).rrweb; + record({ + emit: (window as IWindow).emit, + }); + addCustomEvent('tag1', 1); + addCustomEvent<{ a: string }>('tag2', { + a: 'b', + }); + }); + await this.page.waitFor(50); + assertSnapshot(this.events, __filename, 'custom-event'); + }); }); diff --git a/typings/index.d.ts b/typings/index.d.ts index f0360762a5..a378a65624 100644 --- a/typings/index.d.ts +++ b/typings/index.d.ts @@ -1,5 +1,5 @@ -import record from './record'; +import record, { addCustomEvent } from './record'; import { Replayer } from './replay'; import { mirror } from './utils'; export { EventType, IncrementalSource, MouseInteractions, ReplayerEvents, } from './types'; -export { record, Replayer, mirror }; +export { record, addCustomEvent, Replayer, mirror }; diff --git a/typings/record/index.d.ts b/typings/record/index.d.ts index 3dbb11b513..acf2d9f4e3 100644 --- a/typings/record/index.d.ts +++ b/typings/record/index.d.ts @@ -1,3 +1,4 @@ import { recordOptions, listenerHandler } from '../types'; +export declare function addCustomEvent(tag: string, payload: T): void; declare function record(options?: recordOptions): listenerHandler | undefined; export default record;