1
+ #!/usr/bin/env node
1
2
/***
2
3
* JSX development server started by `make server`
3
4
* includes JSX compiler for web (try/build/jsx-compiler.js).
@@ -24,6 +25,21 @@ catch(e) {
24
25
console . warn ( "Unexpected node.js version (>=0.6.0 required), because: %s" , e . toString ( ) ) ;
25
26
}
26
27
28
+ function homeDir ( ) {
29
+ if ( process . env . HOME ) {
30
+ return process . env . HOME ;
31
+ }
32
+ return process . env . USERPROFILE ;
33
+ }
34
+
35
+ function mkdir ( dir ) {
36
+ try {
37
+ fs . mkdirSync ( dir ) ;
38
+ } catch ( e ) {
39
+ // FIXME ignore EEXIST only, but how?
40
+ }
41
+ }
42
+
27
43
function finish ( response , uri , status , content_type , content ) {
28
44
var len = content . length ;
29
45
@@ -83,11 +99,10 @@ function serveFile(response, uri, filename) {
83
99
}
84
100
85
101
function saveProfile ( request , response ) {
86
- var profileDir = "web/.profile";
87
-
88
102
response . setHeader ( "Access-Control-Allow-Origin" , "*" ) ;
89
103
response . setHeader ( "Access-Control-Allow-Methods" , "POST,PUT,GET,OPTIONS" ) ;
90
104
response . setHeader ( "Access-Control-Allow-Headers" , "Content-Type,*" ) ;
105
+ console . log ( request . method ) ;
91
106
if ( request . method != "POST" || request . method == "PUT" ) {
92
107
response . end ( ) ;
93
108
return ;
@@ -128,35 +143,38 @@ function saveProfile(request, response) {
128
143
return ;
129
144
}
130
145
// save
131
- try {
132
- fs.mkdirSync(profileDir);
133
- } catch (e) {
134
- // FIXME ignore EEXIST only, but how?
135
- }
146
+ var home = homeDir ( ) ;
147
+ mkdir ( path . join ( home , '.jsx' ) ) ;
148
+ mkdir ( path . join ( home , '.jsx' , 'profile' ) ) ;
136
149
var id = YYYYmmddHHMMSS ( ) ;
150
+ console . log ( id ) ;
137
151
138
- fs.writeFileSync(profileDir + "/" + id + " .json" , JSON.stringify(json));
152
+ fs . writeFileSync ( path . join ( home , '.jsx' , 'profile' , id + ' .json' ) , JSON . stringify ( json ) ) ;
139
153
// send response
140
154
response . writeHead ( 200 , "OK" , {
141
- "Location" : "http://" + request.headers.host + "/web/profiler .html?" + id,
155
+ "Location" : "http://" + request . headers . host + "/index .html?" + id ,
142
156
"Content-Type" : "text/plain"
143
157
} ) ;
144
- response.write("saved profile at http://" + request.headers.host + "/web/profiler .html?" + id);
158
+ response . write ( "saved profile at http://" + request . headers . host + "/index .html?" + id ) ;
145
159
response . end ( ) ;
146
160
147
- console.info("[I] saved profile at http://" + request.headers.host + "/web/profiler .html?" + id);
161
+ console . info ( "[I] saved profile at http://" + request . headers . host + "/index .html?" + id ) ;
148
162
} ) ;
149
163
}
150
164
151
165
function listProfileResults ( request , response ) {
152
- var results = fs.readdirSync("web/.profile").filter(function (file) {
153
- return /\d{4}-\d{2}-\d{2}-\d{4}/.test(file);
154
- }).map(function (file) {
155
- return file.replace(/\.\w+$/, "");
156
- }).sort(function (a, b) {
157
- return b.localeCompare(a)
158
- });
159
-
166
+ var home = homeDir ( ) ;
167
+ var profileDir = path . join ( home , '.jsx' , 'profile' ) ;
168
+ var results = [ ] ;
169
+ if ( fs . existsSync ( profileDir ) ) {
170
+ results = fs . readdirSync ( profileDir ) . filter ( function ( file ) {
171
+ return / \d { 4 } - \d { 2 } - \d { 2 } - \d { 6 } / . test ( file ) ;
172
+ } ) . map ( function ( file ) {
173
+ return file . replace ( / \. \w + $ / , "" ) ;
174
+ } ) . sort ( function ( a , b ) {
175
+ return b . localeCompare ( a )
176
+ } ) ;
177
+ }
160
178
response . writeHead ( 200 , "OK" , {
161
179
"Content-Type" : "application/json"
162
180
} ) ;
@@ -165,43 +183,32 @@ function listProfileResults(request, response) {
165
183
}
166
184
167
185
function main ( args ) {
168
- var port = args[0] || "5000 ";
186
+ var port = args [ 0 ] || "2012 " ;
169
187
170
188
var httpd = http . createServer ( function ( request , response ) {
171
189
var uri = url . parse ( request . url ) . pathname ;
172
-
173
190
if ( uri === "/" ) {
174
- response.writeHead(301, {
175
- Location: "try/"
176
- });
177
- response.end();
178
- return;
191
+ uri = 'index.html' ;
179
192
}
180
193
181
194
// profiler stuff
195
+ var filepath ;
182
196
if ( / ^ \/ p o s t - p r o f i l e \/ ? $ / . test ( uri ) ) {
197
+ console . log ( "save-profile" ) ;
183
198
return saveProfile ( request , response ) ;
184
199
}
185
200
else if ( / \/ \. p r o f i l e \/ r e s u l t s \. j s o n $ / . test ( uri ) ) {
201
+ console . log ( "list-profile" ) ;
186
202
return listProfileResults ( request , response ) ;
187
203
}
188
-
189
- var filename = path.join(process.cwd(), uri);
190
-
191
- if(/(?:\.html|\/)$/.test(filename)) {
192
- child_process.execFile(
193
- "perl", ["web/build.pl"],
194
- function(error, stdout, stderr) {
195
- if(error) {
196
- finish(response, uri, 500, "text/plain", error + "\n");
197
- return;
198
- }
199
- serveFile(response, uri, filename);
200
- });
204
+ else if ( / \/ \. p r o f i l e \/ \d { 4 } - \d { 2 } - \d { 2 } - \d { 6 } \. j s o n / . test ( uri ) ) {
205
+ filepath = path . resolve ( homeDir ( ) , '.jsx' , 'profile' , uri . match ( / \d { 4 } - \d { 2 } - \d { 2 } - \d { 6 } .j s o n / ) [ 0 ] ) ;
201
206
}
202
- else {
203
- serveFile(response, uri, filename);
207
+ else if ( uri [ 0 ] === '/' ) {
208
+ uri = uri . slice ( 1 ) ;
209
+ filepath = path . resolve ( __dirname , '..' , 'etc' , 'profiler' , uri ) ;
204
210
}
211
+ serveFile ( response , uri , filepath ) ;
205
212
} ) ;
206
213
httpd . listen ( parseInt ( port , 10 ) ) ;
207
214
0 commit comments