From f8079fbea7597dc6e2486ac2d99704043372cf98 Mon Sep 17 00:00:00 2001 From: Yanzhen Yu Date: Sat, 6 Oct 2018 23:13:51 +0800 Subject: [PATCH] init the repo and integrate rrweb-snapshot --- .gitignore | 4 ++++ .prettierrc | 4 ++++ README.md | 3 +++ package.json | 29 +++++++++++++++++++++++++++++ src/index.ts | 3 +++ src/record.ts | 35 +++++++++++++++++++++++++++++++++++ src/types.ts | 12 ++++++++++++ tsconfig.json | 15 +++++++++++++++ tslint.json | 21 +++++++++++++++++++++ 9 files changed, 126 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 package.json create mode 100644 src/index.ts create mode 100644 src/record.ts create mode 100644 src/types.ts create mode 100644 tsconfig.json create mode 100644 tslint.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..6ccc9d846d --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +.vscode +node_modules +package-lock.json +build diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000..a20502b7f0 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000..c765d924e4 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# rrweb + +Not ready yet diff --git a/package.json b/package.json new file mode 100644 index 0000000000..9b2f59810f --- /dev/null +++ b/package.json @@ -0,0 +1,29 @@ +{ + "name": "rrweb", + "version": "0.1.0", + "description": "record and replay the web", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/rrweb-io/rrweb.git" + }, + "keywords": [ + "rrweb" + ], + "author": "yanzhen@smartx.com", + "license": "MIT", + "bugs": { + "url": "https://github.com/rrweb-io/rrweb/issues" + }, + "homepage": "https://github.com/rrweb-io/rrweb#readme", + "devDependencies": { + "tslint": "^4.5.1", + "typescript": "^3.1.1" + }, + "dependencies": { + "rrweb-snapshot": "file:../snapshot" + } +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000000..8280d65856 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,3 @@ +import record from './record'; + +export { record }; diff --git a/src/record.ts b/src/record.ts new file mode 100644 index 0000000000..6b0cc41dd3 --- /dev/null +++ b/src/record.ts @@ -0,0 +1,35 @@ +import { snapshot } from 'rrweb-snapshot'; +import { EventType, event } from './types'; + +function on( + type: string, + fn: EventListenerOrEventListenerObject, + target = document, +) { + target.addEventListener(type, fn); +} + +function createEvent(type: EventType, data: any): event { + return { + type, + data, + timestamp: Date.now(), + }; +} + +function emit(e: event) {} + +function record() { + on('DOMContentLoaded', () => { + emit( + createEvent(EventType.DomContentLoaded, { href: window.location.href }), + ); + }); + on('load', () => { + emit(createEvent(EventType.Load, null)); + const node = snapshot(document); + emit(createEvent(EventType.FullSnapshot, { node })); + }); +} + +export default record; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000000..4fb5e7161b --- /dev/null +++ b/src/types.ts @@ -0,0 +1,12 @@ +export enum EventType { + DomContentLoaded, + Load, + FullSnapshot, + IncrementalSnapshot, +} + +export type event = { + type: EventType; + timestamp: number; + data: any; +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..6378ca69d7 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "module": "commonjs", + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "rootDir": "src", + "outDir": "build", + "lib": ["es6", "dom"] + }, + "compileOnSave": true, + "exclude": ["test"], + "include": ["src", "index.d.ts"] +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000000..a153081c53 --- /dev/null +++ b/tslint.json @@ -0,0 +1,21 @@ +{ + "defaultSeverity": "error", + "extends": ["tslint:recommended"], + "jsRules": {}, + "rules": { + "no-any": true, + "quotemark": [true, "single"], + "ordered-imports": false, + "object-literal-sort-keys": false, + "no-unused-variable": true, + "object-literal-key-quotes": false, + "variable-name": [ + true, + "ban-keywords", + "check-format", + "allow-leading-underscore" + ], + "arrow-parens": false + }, + "rulesDirectory": [] +}