Skip to content

Commit d562383

Browse files
committed
feat(config): mime config option support
Allows to setup required mime-type to extensions mapping (for ex. fix default *.ts to video/mp2t mapping) Closes #1735
1 parent db04cf0 commit d562383

4 files changed

Lines changed: 42 additions & 1 deletion

File tree

docs/config/01-configuration-file.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,23 @@ Note: Just about all additional reporters in Karma (other than progress) require
441441
If `true`, Karma will start and capture all configured browsers, run tests and then exit with an exit code of `0` or `1` depending
442442
on whether all tests passed or any tests failed.
443443

444+
## mime
445+
**Type:** Object
446+
447+
**Default:** `{}`
448+
449+
**Description:** Redefine default mapping from file extensions to MIME-type
450+
451+
Set property name to required MIME, provide Array of extensions (without dots) as it's value
452+
453+
**Example:**
454+
```javascript
455+
mime: {
456+
'text/x-typescript': ['ts','tsx']
457+
'text/plain' : ['mytxt']
458+
}
459+
```
460+
444461

445462
## transports
446463
**Type:** Array

lib/middleware/common.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
var mime = require('mime')
66
var log = require('../logger').create('web-server')
7+
var helper = require('../helper')
8+
var _ = helper._
79

810
var PromiseContainer = function () {
911
var promise
@@ -92,9 +94,20 @@ var setHeavyCacheHeaders = function (response) {
9294
response.setHeader('Cache-Control', 'public, max-age=31536000')
9395
}
9496

97+
var initializeMimeTypes = function (config) {
98+
if (config && config.mime) {
99+
_.forEach(config.mime, function (value, key) {
100+
var map = {}
101+
map[key] = value
102+
mime.define(map)
103+
})
104+
}
105+
}
106+
95107
// PUBLIC API
96108
exports.PromiseContainer = PromiseContainer
97109
exports.createServeFile = createServeFile
98110
exports.setNoCacheHeaders = setNoCacheHeaders
99111
exports.setHeavyCacheHeaders = setHeavyCacheHeaders
112+
exports.initializeMimeTypes = initializeMimeTypes
100113
exports.serve404 = serve404

lib/web-server.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ createCustomHandler.$inject = ['customFileHandlers', 'config.basePath']
3131

3232
var createWebServer = function (injector, emitter, fileList) {
3333
var config = injector.get('config')
34+
common.initializeMimeTypes(config)
3435
var serveStaticFile = common.createServeFile(fs, path.normalize(__dirname + '/../static'), config)
3536
var serveFile = common.createServeFile(fs, null, config)
3637
var filesPromise = new common.PromiseContainer()

test/unit/web-server.spec.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import request from 'supertest-as-promised'
44
import di from 'di'
55
import mocks from 'mocks'
66
import fs from 'fs'
7+
import mime from 'mime'
78

89
describe('web-server', () => {
910
var server
@@ -45,7 +46,8 @@ describe('web-server', () => {
4546
basePath: '/base/path',
4647
urlRoot: '/',
4748
middleware: ['custom'],
48-
middlewareResponse: 'hello middleware!'
49+
middlewareResponse: 'hello middleware!',
50+
mime: {'custom/custom': ['custom']}
4951
}
5052

5153
var injector = new di.Injector([{
@@ -71,6 +73,14 @@ describe('web-server', () => {
7173
server = injector.invoke(m.createWebServer)
7274
})
7375

76+
it('should setup mime', () => {
77+
expect(mime.lookup('/my.custom')).to.equal('custom/custom')
78+
})
79+
80+
it('should keep default mimes', () => {
81+
expect(mime.lookup('/my.html')).to.equal('text/html')
82+
})
83+
7484
it('should serve client.html', () => {
7585
servedFiles(new Set())
7686

0 commit comments

Comments
 (0)