2 var http = require('http')
3 var path = require('path')
4 var connect = require('connect')
6 var common = require('./middleware/common')
7 var runnerMiddleware = require('./middleware/runner')
8 var stripHostMiddleware = require('./middleware/strip_host')
9 var karmaMiddleware = require('./middleware/karma')
10 var sourceFilesMiddleware = require('./middleware/source_files')
11 var proxyMiddleware = require('./middleware/proxy')
13 var log = require('./logger').create('web-server')
15 var createCustomHandler = function (customFileHandlers, /* config.basePath */ basePath) {
16 return function (request, response, next) {
17 for (var i = 0; i < customFileHandlers.length; i++) {
18 if (customFileHandlers[i].urlRegex.test(request.url)) {
19 return customFileHandlers[i].handler(request, response, 'fake/static', 'fake/adapter',
20 basePath, 'fake/root')
28 createCustomHandler.$inject = ['customFileHandlers', 'config.basePath']
30 var createWebServer = function (injector, emitter) {
31 var serveStaticFile = common.createServeFile(fs, path.normalize(__dirname + '/../static'))
32 var serveFile = common.createServeFile(fs)
33 var filesPromise = new common.PromiseContainer()
35 emitter.on('file_list_modified', function (files) {
36 filesPromise.set(files)
39 // locals for webserver module
40 // NOTE(vojta): figure out how to do this with DI
41 injector = injector.createChild([{
42 serveFile: ['value', serveFile],
43 serveStaticFile: ['value', serveStaticFile],
44 filesPromise: ['value', filesPromise]
47 var proxyMiddlewareInstance = injector.invoke(proxyMiddleware.create)
49 var handler = connect()
50 .use(injector.invoke(runnerMiddleware.create))
51 .use(injector.invoke(stripHostMiddleware.create))
52 .use(injector.invoke(karmaMiddleware.create))
53 .use(injector.invoke(sourceFilesMiddleware.create))
54 // TODO(vojta): extract the proxy into a plugin
55 .use(proxyMiddlewareInstance)
56 // TODO(vojta): remove, this is only here because of karma-dart
57 // we need a better way of custom handlers
58 .use(injector.invoke(createCustomHandler))
59 .use(function (request, response) {
60 common.serve404(response, request.url)
63 var server = http.createServer(handler)
65 server.on('upgrade', function (req, socket, head) {
66 log.debug('upgrade %s', req.url)
67 proxyMiddlewareInstance.upgrade(req, socket, head)
74 exports.create = createWebServer