commit f8079fbea7597dc6e2486ac2d99704043372cf98 Author: Yanzhen Yu Date: Sat Oct 6 23:13:51 2018 +0800 init the repo and integrate rrweb-snapshot diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6ccc9d8 --- /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 0000000..a20502b --- /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 0000000..c765d92 --- /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 0000000..9b2f598 --- /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 0000000..8280d65 --- /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 0000000..6b0cc41 --- /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 0000000..4fb5e71 --- /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 0000000..6378ca6 --- /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 0000000..a153081 --- /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": [] +}