(srv, doc, c)
| 233 | }); |
| 234 | |
| 235 | function doRequest(srv, doc, c) { |
| 236 | if (doc.query && !queryTypes.hasOwnProperty(doc.query.type)) |
| 237 | return c("No query type '" + doc.query.type + "' defined"); |
| 238 | |
| 239 | var query = doc.query; |
| 240 | // Respond as soon as possible when this just uploads files |
| 241 | if (!query) c(null, {}); |
| 242 | |
| 243 | var files = doc.files || []; |
| 244 | if (files.length) ++srv.uses; |
| 245 | for (var i = 0; i < files.length; ++i) { |
| 246 | var file = files[i]; |
| 247 | file.name = srv.normalizeFilename(file.name); |
| 248 | if (file.type == "delete") |
| 249 | srv.delFile(file.name); |
| 250 | else |
| 251 | ensureFile(srv, file.name, null, file.type == "full" ? file.text : null); |
| 252 | } |
| 253 | |
| 254 | var timeBudget = typeof doc.timeout == "number" ? [doc.timeout] : null; |
| 255 | if (!query) { |
| 256 | analyzeAll(srv, timeBudget, function(){}); |
| 257 | return; |
| 258 | } |
| 259 | |
| 260 | var queryType = queryTypes[query.type]; |
| 261 | if (queryType.takesFile) { |
| 262 | if (typeof query.file != "string") return c(".query.file must be a string"); |
| 263 | if (!/^#/.test(query.file)) ensureFile(srv, query.file, null); |
| 264 | } |
| 265 | |
| 266 | analyzeAll(srv, timeBudget, function(err) { |
| 267 | if (err) return c(err); |
| 268 | var file = queryType.takesFile && resolveFile(srv, files, query.file); |
| 269 | if (queryType.fullFile && file.type == "part") |
| 270 | return c("Can't run a " + query.type + " query on a file fragment"); |
| 271 | |
| 272 | infer.resetGuessing(); |
| 273 | infer.withContext(srv.cx, function() { |
| 274 | var result, run = function() { result = queryType.run(srv, query, file); }; |
| 275 | try { |
| 276 | if (timeBudget) infer.withTimeout(timeBudget[0], run); |
| 277 | else run(); |
| 278 | } catch (e) { |
| 279 | if (srv.options.debug && e.name != "TernError") console.error(e.stack); |
| 280 | return c(e); |
| 281 | } |
| 282 | c(null, result); |
| 283 | }); |
| 284 | }); |
| 285 | } |
| 286 | |
| 287 | function analyzeFile(srv, file) { |
| 288 | infer.withContext(srv.cx, function() { |
no test coverage detected
searching dependent graphs…