Skip to content

Commit 9b99c31

Browse files
committed
Merge pull request #1 from esp/devtoolsv1
Initial cut of the dev tools window
2 parents a624bab + 7c4799e commit 9b99c31

17 files changed

Lines changed: 594 additions & 91 deletions

.npmignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ examples/
44
docs
55
*.log
66
.travis.yml
7-
NOTICE
7+
NOTICE
8+
dev-server/

package.json

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,43 @@
11
{
22
"name": "esp-js-devtools",
3-
"version": "0.0.1",
3+
"version": "0.0.6",
44
"description": "Evented State Processor (ESP) dev tools",
5-
"main": "src/index.js",
5+
"main": "dist/esp-js-devtools.js",
66
"scripts": {
7-
"dev": "webpack-dev-server --progress --colors --hot --debug --devtool cheap-module-source-map --display-chunks"
7+
"start": "npm run build",
8+
"build:dev": "webpack --config webpack.dev.config.js",
9+
"dev": "webpack --progress --watch --colors --hot --debug --display-chunks --config webpack.dev.config.js"
810
},
911
"author": "Dev Shop Limited",
1012
"license": "Apache 2",
1113
"repository": "https://github.com/esp/esp-js",
1214
"dependencies": {
13-
"react": "^0.14.7",
15+
"babel-plugin-transform-runtime": "^6.4.3",
16+
"esp-js": "^0.5.13",
17+
"install": "^0.4.2",
18+
"jquery": "^2.2.0",
19+
"jquery-ui": "^1.10.5",
20+
"lodash": "^4.2.1",
21+
"moment": "^2.11.2",
22+
"npm": "^3.6.0",
1423
"vis": "^4.13.0",
1524
"webpack-dev-server": "^1.14.1"
1625
},
1726
"devDependencies": {
1827
"babel-core": "^6.4.5",
1928
"babel-loader": "^6.2.1",
29+
"esp-js": "0.5.7-beta",
2030
"babel-plugin-transform-decorators-legacy": "^1.3.4",
2131
"babel-preset-es2015": "^6.3.13",
2232
"babel-preset-react": "^6.3.13",
2333
"babel-preset-stage-0": "^6.3.13",
2434
"css-loader": "^0.23.1",
35+
"file-loader": "^0.8.5",
36+
"html-loader": "^0.4.0",
37+
"imports-loader": "^0.6.5",
2538
"less": "^2.6.0",
2639
"less-loader": "^2.2.2",
40+
"script-loader": "^0.6.1",
2741
"style-loader": "^0.13.0",
2842
"webpack": "^1.12.12"
2943
}

src/analyticsMonitor.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import DebugToolsModel from './debugToolsModel';
2+
3+
export default class AnalyticsMonitor {
4+
constructor(router) {
5+
this._router = router;
6+
}
7+
addModel(modelId) {
8+
if(modelId === DebugToolsModel.modelId) return;
9+
this._router.publishEvent('modelAdded', {modelId: modelId});
10+
}
11+
publishEvent(modelId, eventType, event) {
12+
if(modelId === DebugToolsModel.modelId) return;
13+
this._router.publishEvent('eventPublished', {modelId: modelId, eventType: eventType, event:event});
14+
}
15+
broadcastEvent(eventType) {
16+
}
17+
executingEvent(modelId) {
18+
}
19+
runAction(modelId) {
20+
}
21+
eventEnqueued(modelId, eventType) {
22+
}
23+
eventIgnored(modelId, eventType) {
24+
}
25+
dispatchLoopStart() {
26+
}
27+
startingModelEventLoop(modelId, initiatingEventType) {
28+
}
29+
preProcessingModel() {
30+
}
31+
dispatchingEvents() {
32+
}
33+
dispatchingAction() {
34+
}
35+
dispatchingEvent(eventType, stage) {
36+
}
37+
dispatchingViaDirective(functionName) {
38+
}
39+
dispatchingViaConvention(functionName) {
40+
}
41+
finishDispatchingEvent() {
42+
}
43+
postProcessingModel() {
44+
}
45+
endingModelEventLoop() {
46+
}
47+
dispatchingModelUpdates(modelId) {
48+
}
49+
dispatchLoopEnd() {
50+
}
51+
halted(modelIds, err) {
52+
if(modelIds.indexOf(DebugToolsModel.modelId) >=0 ) return;
53+
this._router.publishEvent('halted', {modelIds: modelIds, err: err});
54+
}
55+
registerMonitor(devToolsDiagnosticMonitor) {
56+
57+
}
58+
unregisterMonitor(devToolsDiagnosticMonitor) {
59+
60+
}
61+
}

src/debugToolsModel.js

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
import esp from 'esp-js';
2+
import _ from 'lodash';
3+
import moment from 'moment';
4+
import UpdateType from './updateType';
5+
import RegisteredModel from './registeredModel';
6+
7+
export default class DebugToolsModel extends esp.model.DisposableBase {
8+
constructor(router) {
9+
super();
10+
this._router = router;
11+
this._registeredModels = {};
12+
this._eventsByNumber = {};
13+
this._lastEvent = null;
14+
this._selectedEvent = null;
15+
this._updateType = UpdateType.none;
16+
this._eventCounter = 0;
17+
this._timerSubscription = null;
18+
this.addDisposable(() => {
19+
if(this._timerSubscription != null) {
20+
clearInterval(this._timerSubscription);
21+
}
22+
});
23+
this._now = moment();
24+
this._shouldAutoScroll = true;
25+
this._shouldCaptureEvents = true;
26+
this._shouldLogToConsole = false;
27+
}
28+
static get modelId() {
29+
return 'esp-debugTools-modelId';
30+
}
31+
get updateType() {
32+
return this._updateType;
33+
}
34+
get registeredModels() {
35+
return _.values(this._registeredModels);
36+
}
37+
get lastEvent() {
38+
return this._lastEvent;
39+
}
40+
get selectedEvent() {
41+
return this._selectedEvent;
42+
}
43+
get now() {
44+
return this._now;
45+
}
46+
get shouldAutoScroll() {
47+
return this._shouldAutoScroll;
48+
}
49+
get totalEventCount() {
50+
return this._eventCounter;
51+
}
52+
observeEvents() {
53+
this.addDisposable(this._router.observeEventsOn(this));
54+
}
55+
preProcess() {
56+
this._updateType = UpdateType.none;
57+
this._lastEvent = null;
58+
}
59+
@esp.observeEvent('modelAdded', esp.ObservationStage.preview)
60+
@esp.observeEvent('modelRemoved', esp.ObservationStage.preview)
61+
@esp.observeEvent('eventPublished', esp.ObservationStage.preview)
62+
_previewEvents(event, context) {
63+
if(!this._shouldCaptureEvents) {
64+
context.cancel();
65+
}
66+
}
67+
@esp.observeEvent('initEvent')
68+
_onInitEvent() {
69+
this._startTimer();
70+
}
71+
@esp.observeEvent('modelAdded')
72+
_onModelAdded(event) {
73+
this._updateType = UpdateType.modelsChanged;
74+
this._addModel(event.modelId);
75+
}
76+
@esp.observeEvent('modelRemoved')
77+
_onModelRemoved(event) {
78+
this._updateType = UpdateType.modelsChanged;
79+
delete this._registeredModels[event.modelId];
80+
}
81+
@esp.observeEvent('eventPublished')
82+
_onEventPublished(event) {
83+
this._updateType = UpdateType.eventsChanged;
84+
let registeredModel = this._registeredModels[event.modelId];
85+
if (!registeredModel) {
86+
registeredModel = this._addModel(event.modelId);
87+
}
88+
this._eventCounter++;
89+
this._lastEvent = registeredModel.eventPublished(this._eventCounter, event.modelId, event.eventType);
90+
this._eventsByNumber[this._eventCounter] = this._lastEvent;
91+
if(this._shouldLogToConsole) {
92+
console.log(`[ESP-Event] ModelId:[${event.modelId}] EventType:[${event.eventType}]`, event.event);
93+
}
94+
}
95+
_addModel(modelId) {
96+
this._updateType = UpdateType.modelsChanged;
97+
let registeredModel = this._registeredModels[modelId];
98+
if(registeredModel) {
99+
throw new Error(`model with id ${modelId} already registered`);
100+
}
101+
registeredModel = new RegisteredModel(modelId);
102+
this._registeredModels[modelId] = registeredModel;
103+
return registeredModel;
104+
}
105+
@esp.observeEvent('eventSelected')
106+
_onEventSelected(event) {
107+
this._shouldAutoScroll = false;
108+
this._selectedEvent = this._eventsByNumber[event.eventNumber];
109+
}
110+
@esp.observeEvent('disableAutoScroll')
111+
_onDisableAutoScroll(event) {
112+
this._shouldAutoScroll = false;
113+
}
114+
@esp.observeEvent('autoscrollToggled')
115+
_onAutoscrollToggled(event) {
116+
this._shouldAutoScroll = event.shouldAutoScroll;
117+
}
118+
@esp.observeEvent('captureEventsToggled')
119+
_onCaptureEventsToggled(event) {
120+
this._shouldCaptureEvents = event.shouldCaptureEvents;
121+
}
122+
@esp.observeEvent('logEventsConsoleToggled')
123+
_onLogEventsConsoleToggled(event) {
124+
this._shouldLogToConsole = event.shouldLogToConsole;
125+
}
126+
@esp.observeEvent('resetChart')
127+
_onResetChart() {
128+
this._updateType = UpdateType.reset;
129+
this._registeredModels = {};
130+
}
131+
_startTimer() {
132+
// start a timer so we can keep moving the chart forward
133+
this._timerSubscription = setInterval(() => {
134+
this._router.runAction(() => {
135+
this._updateType = UpdateType.timeChanged;
136+
this._now = moment();
137+
});
138+
}, 1000);
139+
}
140+
}

0 commit comments

Comments
 (0)