@@ -30,7 +30,7 @@ var ENV = require( '@stdlib/process/env' );
30
30
var copy = require ( '@stdlib/utils/copy' ) ;
31
31
var merge = require ( '@stdlib/utils/merge' ) ;
32
32
var readFileSync = require ( '@stdlib/fs/read-file' ) . sync ;
33
- var httpServer = require ( '@stdlib/net/disposable-http- server' ) ;
33
+ var createServer = require ( '@stdlib/plot/base/ server' ) ;
34
34
var tryRequire = require ( '@stdlib/utils/try-require' ) ;
35
35
36
36
@@ -54,6 +54,7 @@ var electron = tryRequire( '@stdlib/electron' );
54
54
* @throws {Error } Electron must be properly installed
55
55
*/
56
56
function view ( plot , html ) {
57
+ var server ;
57
58
var index ;
58
59
var opts ;
59
60
var css ;
@@ -76,31 +77,29 @@ function view( plot, html ) {
76
77
css = readFileSync ( css , opts ) ;
77
78
index = index . replace ( / \{ \{ r e s e t \} \} / , css ) ;
78
79
79
- debug ( 'Creating a disposable HTTP server...' ) ;
80
- opts = {
81
- 'html' : index ,
82
- 'open' : false
83
- } ;
84
- httpServer ( opts , onReady ) ;
80
+ debug ( 'Creating a server...' ) ;
81
+ createServer ( router , onReady ) ;
85
82
86
83
/**
87
84
* Callback invoked once a server is ready to receive requests.
88
85
*
89
86
* @private
90
87
* @param {(Error|null) } error - error object
91
- * @param {Server } server - HTTP server
88
+ * @param {Server } _server - server instance
92
89
* @throws {Error } unexpected error
93
90
*/
94
- function onReady ( error , server ) {
91
+ function onReady ( error , _server ) {
95
92
var child ;
96
93
var addr ;
97
94
var opts ;
98
95
var env ;
99
96
if ( error ) {
100
97
throw error ;
101
98
}
99
+ server = _server ;
100
+
102
101
addr = server . address ( ) ;
103
- debug ( 'HTTP server initialized. Server is listening for requests on %s:%d.' , addr . address , addr . port ) ;
102
+ debug ( 'Server initialized. Server is listening for requests on %s:%d.' , addr . address , addr . port ) ;
104
103
105
104
debug ( 'Electron executable: %s.' , electron ) ;
106
105
@@ -111,26 +110,51 @@ function view( plot, html ) {
111
110
'PLOT_WIDTH' : plot . width ,
112
111
'PLOT_HEIGHT' : plot . height ,
113
112
'PLOT_APP_PATH' : __dirname ,
114
- 'PLOT_MIN_WIDTH' : 100 ,
115
- 'PLOT_MIN_HEIGHT' : 100 ,
116
113
'PLOT_TITLE' : plot . title || 'stdlib'
117
114
} ;
118
115
debug ( 'Electron process environment variables: %s.' , JSON . stringify ( env ) ) ;
119
116
120
117
opts = {
121
118
'cwd' : __dirname ,
122
119
'detached' : true ,
123
- 'stdio' : 'ignore'
120
+ 'stdio' : 'ignore' // NOTE: when debugging, set to 'inherit'
124
121
} ;
125
122
debug ( 'Electron process options: %s.' , JSON . stringify ( opts ) ) ;
126
123
127
124
// Merge the current process' environment variables:
128
125
opts . env = merge ( { } , copy ( ENV ) , env ) ;
126
+ opts . env . DEBUG = '*' ;
129
127
130
128
debug ( 'Spawning an electron process...' ) ;
131
129
child = spawn ( electron , [ './main.js' ] , opts ) ;
132
130
child . unref ( ) ;
133
131
}
132
+
133
+ /**
134
+ * Request handler.
135
+ *
136
+ * @private
137
+ * @param {IncomingMessage } request - HTTP request object
138
+ * @param {ServerResponse } response - HTTP response object
139
+ * @returns {void }
140
+ */
141
+ function router ( request , response ) {
142
+ debug ( 'Received a request for %s' , request . url ) ;
143
+ response . once ( 'finish' , onFinish ) ;
144
+ response . write ( index ) ;
145
+ response . end ( ) ;
146
+ }
147
+
148
+ /**
149
+ * Callback invoked once the server should close.
150
+ *
151
+ * @private
152
+ */
153
+ function onFinish ( ) {
154
+ debug ( 'Finished serving content.' ) ;
155
+ debug ( 'Closing the server...' ) ;
156
+ server . close ( ) ;
157
+ }
134
158
}
135
159
136
160
0 commit comments