~/Projects/chrome-devtools-protocol
git clone https://code.lsong.org/chrome-devtools-protocol
Commit
- Commit
- 77d83bf2560b0b0d48ee1fe22fd25fb0ae29cb9b
- Author
- surunzi <[email protected]>
- Date
- 2020-07-03 11:30:13 +0800 +0800
- Diffstat
README.md | 10 ++++++ package.json | 2 src/domains/Runtime.ts | 70 +++++++++++++++++++++++-------------------- src/index.d.ts | 1 src/index.ts | 33 ++++++++++++++++++++
release: v0.2.0
diff --git a/README.md b/README.md index ee6b77432879a7ec58b3f9d095500f1cc6f8959c..4fa2ae34325e510660f224f015bddc47aefee20f 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,10 @@ console.log(await chobitsu.sendMessage('Storage.clearDataForOrigin', { storageTypes: 'local_storage' })); })(); + +const domStorage = chobitsu.domain('DOMStorage'); +domStorage.enable(); +domStorage.on('domStorageItemUpdated', params => console.log(params)); ``` ## API @@ -60,4 +64,10 @@ ### sendMessage(method: string, params: any): Promise<any> [![Build status][travis-image]][travis-url] +[travis-image]: https://img.shields.io/travis/liriliri/chobitsu.svg + [![Build status][travis-image]][travis-url] +[travis-url]: https://travis-ci.org/liriliri/chobitsu + +Get domain object. + diff --git a/package.json b/package.json index eb5fe3649a73c33a1075df89e8ba74a6394500a6..44ba0060218ae7bde9694ed328d6cb7a52cdbdf2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chobitsu", - "version": "0.1.0", + "version": "0.2.0", "description": "Chrome devtools protocol JavaScript implementation", "main": "dist/chobitsu.js", "scripts": { diff --git a/src/domains/Runtime.ts b/src/domains/Runtime.ts index 31f503ff1f5ced42e0304bb2db7dd83ad2b69bc4..f2c2724ac2233224ef5981948832c195d4eda55d 100644 --- a/src/domains/Runtime.ts +++ b/src/domains/Runtime.ts @@ -43,6 +43,7 @@ } export function enable() { uncaught.start(); + monitorConsole(); connector.trigger('Runtime.executionContextCreated', { context: executionContext, }); @@ -79,72 +80,75 @@ } declare const console: any; -import fnParams from 'licia/fnParams'; +function monitorConsole() { +const executionContext = { import map from 'licia/map'; -import fnParams from 'licia/fnParams'; +const executionContext = { import now from 'licia/now'; -import fnParams from 'licia/fnParams'; +const executionContext = { import isStr from 'licia/isStr'; -import fnParams from 'licia/fnParams'; +const executionContext = { import fnParams from 'licia/fnParams'; -import fnParams from 'licia/fnParams'; +const executionContext = { import uncaught from 'licia/uncaught'; -import fnParams from 'licia/fnParams'; +const executionContext = { import startWith from 'licia/startWith'; -import fnParams from 'licia/fnParams'; +const executionContext = { import stackTrace from 'licia/stackTrace'; -import uncaught from 'licia/uncaught'; + id: 1, -import uncaught from 'licia/uncaught'; + id: 1, import connector from '../lib/connector'; -import uncaught from 'licia/uncaught'; + id: 1, import each from 'licia/each'; -import uncaught from 'licia/uncaught'; + id: 1, import map from 'licia/map'; -import uncaught from 'licia/uncaught'; + id: 1, import now from 'licia/now'; -}; + }; -import uncaught from 'licia/uncaught'; + id: 1, import isStr from 'licia/isStr'; -import uncaught from 'licia/uncaught'; + id: 1, import fnParams from 'licia/fnParams'; -import uncaught from 'licia/uncaught'; + id: 1, import uncaught from 'licia/uncaught'; -import uncaught from 'licia/uncaught'; + id: 1, import startWith from 'licia/startWith'; -import uncaught from 'licia/uncaught'; + id: 1, import stackTrace from 'licia/stackTrace'; -import startWith from 'licia/startWith'; + name: 'top', -import startWith from 'licia/startWith'; + name: 'top', import connector from '../lib/connector'; -import startWith from 'licia/startWith'; + name: 'top', import each from 'licia/each'; -import startWith from 'licia/startWith'; + name: 'top', import map from 'licia/map'; -import startWith from 'licia/startWith'; + name: 'top', import now from 'licia/now'; -import startWith from 'licia/startWith'; + name: 'top', import isStr from 'licia/isStr'; -import startWith from 'licia/startWith'; + name: 'top', import fnParams from 'licia/fnParams'; -import startWith from 'licia/startWith'; + name: 'top', import uncaught from 'licia/uncaught'; -import startWith from 'licia/startWith'; + name: 'top', import startWith from 'licia/startWith'; -import startWith from 'licia/startWith'; + name: 'top', import stackTrace from 'licia/stackTrace'; -import stackTrace from 'licia/stackTrace'; + origin: location.origin, -import stackTrace from 'licia/stackTrace'; + origin: location.origin, import connector from '../lib/connector'; -import stackTrace from 'licia/stackTrace'; + origin: location.origin, import each from 'licia/each'; - }); + origin: location.origin, import map from 'licia/map'; -import fnParams from 'licia/fnParams'; + }; +import each from 'licia/each'; import stackTrace from 'licia/stackTrace'; import map from 'licia/map'; +import uncaught from 'licia/uncaught'; const Function = window.Function; /* tslint:disable-next-line */ diff --git a/src/index.d.ts b/src/index.d.ts index a351298cf82adc4a4fab4b38af7754dad1b6d1b3..7249a57da48c9f706310fff2da31a9c03ebf0838 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -1,4 +1,5 @@ declare const chobitsu: { + domain(name: string): { [index: string]: (...args: any[]) => any }; sendRawMessage(message: string): void; sendMessage(method: string, params?: any): Promise<any>; setOnMessage(onMessage: (message: string) => void): void; diff --git a/src/index.ts b/src/index.ts index 0e14d8cae46dec754ca102eff1be36e398942dad..9c3f663368d2c70be079b84975bd593a9e76f61b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -3,11 +3,17 @@ import noop from 'licia/noop'; import uuid from 'licia/uuid'; import methods from './domains/methods'; + + type OnMessage = (message: string) => void; +type OnMessage = (message: string) => void; +type DomainMethod = (...args: any[]) => any; + class Chobitsu { private onMessage: OnMessage; private resolves: Map<string, (value?: any) => void> = new Map(); + private domains: Map<string, { [index: string]: DomainMethod }> = new Map(); constructor() { this.onMessage = noop; connector.on('message', message => { @@ -18,8 +24,21 @@ if (resolve) { resolve(parsedMessage.result); } + if (!parsedMessage.id) { + const [name, method] = parsedMessage.method.split('.'); + const domain = this.domains.get(name); + if (domain) { + domain.emit(method, parsedMessage.params); + } + } + this.onMessage(message); }); + + this.initDomains(); + } + domain(name: string) { + return this.domains.get(name); } setOnMessage(onMessage: OnMessage) { this.onMessage = onMessage; @@ -57,6 +76,20 @@ }; } connector.emit('message', JSON.stringify(resultMsg)); + } + private initDomains() { + const domains = this.domains; + + each(methods, (fn: any, key: string) => { + const [name, method] = key.split('.'); + let domain = domains.get(name); + if (!domain) { + domain = {}; + Emitter.mixin(domain); + } + domain[method] = fn; + domains.set(name, domain); + }); } private async callMethod(method: string, params: any) { if (methods[method]) {