2 * Source Files middleware is responsible for serving all the source files under the test.
5 var querystring = require('querystring')
6 var common = require('./common')
7 var pause = require('connect').utils.pause
9 var findByPath = function (files, path) {
10 for (var i = 0; i < files.length; i++) {
11 if (files[i].path === path) {
19 var createSourceFilesMiddleware = function (filesPromise, serveFile,
20 /* config.basePath */ basePath) {
21 return function (request, response, next) {
22 // TODO(vojta): serve files under urlRoot (also update the formatError)
23 var requestedFilePath = querystring.unescape(request.url)
25 .replace(/^\/absolute/, '')
26 .replace(/^\/base/, basePath)
28 // Need to pause the request because of proxying, see:
29 // https://groups.google.com/forum/#!topic/q-continuum/xr8znxc_K5E/discussion
30 // TODO(vojta): remove once we don't care about Node 0.8
31 var pausedRequest = pause(request)
33 return filesPromise.then(function (files) {
34 // TODO(vojta): change served to be a map rather then an array
35 var file = findByPath(files.served, requestedFilePath)
38 serveFile(file.contentPath || file.path, response, function () {
39 if (/\?\w+/.test(request.url)) {
40 // files with timestamps - cache one year, rely on timestamps
41 common.setHeavyCacheHeaders(response)
43 // without timestamps - no cache (debug)
44 common.setNoCacheHeaders(response)
51 pausedRequest.resume()
56 createSourceFilesMiddleware.$inject = ['filesPromise', 'serveFile', 'config.basePath']
59 exports.create = createSourceFilesMiddleware