Liu Song’s Projects


~/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]) {