Skip to content

Commit 662e882

Browse files
authored
Merge branch 'master' into eaddrinuse
2 parents a1c9437 + 510c69c commit 662e882

File tree

7 files changed

+569
-452
lines changed

7 files changed

+569
-452
lines changed

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22

33
All notable changes to `rollup-plugin-serve` will be documented in this file.
44

5+
## [1.0.3] - 2020-07-21
6+
### Fixed
7+
- Fix path.normalize error on Windows
8+
9+
## [1.0.2] - 2020-07-17
10+
### Fixed
11+
- Fix path traversal issue
12+
513
## [1.0.1] - 2019-01-27
614
### Added
715
- Add Intellisense support #34

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ serve({
8888
headers: {
8989
'Access-Control-Allow-Origin': '*',
9090
foo: 'bar'
91+
},
92+
93+
// set custom mime types, usage https://github.com/broofa/mime#mimedefinetypemap-force--false
94+
mimeTypes: {
95+
'application/javascript': ['js_commonjs-proxy']
9196
}
9297
})
9398
```

package.json

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rollup-plugin-serve",
3-
"version": "1.0.1",
3+
"version": "1.0.4",
44
"description": "Serve your rolled up bundle",
55
"main": "dist/index.cjs.js",
66
"module": "dist/index.es.js",
@@ -10,7 +10,7 @@
1010
"dev": "rollup -cw",
1111
"lint": "standard --fix rollup.config.js src/**",
1212
"prepare": "yarn lint && yarn build",
13-
"test": "cd test && rollup -c || cd .."
13+
"test": "cd test && rollup -cw || cd .."
1414
},
1515
"keywords": [
1616
"rollup",
@@ -33,12 +33,12 @@
3333
"dist"
3434
],
3535
"dependencies": {
36-
"mime": ">=2.0.3",
36+
"mime": ">=2.4.6",
3737
"opener": "1"
3838
},
3939
"devDependencies": {
40-
"rollup": "1",
41-
"rollup-plugin-buble": "^0.15.0",
40+
"@rollup/plugin-buble": "0.21.3",
41+
"rollup": "2",
4242
"standard": "14"
4343
}
4444
}

rollup.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import buble from 'rollup-plugin-buble'
1+
import buble from '@rollup/plugin-buble'
22

33
export default {
44
input: 'src/index.js',

src/index.js

+21-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { readFile } from 'fs'
22
import { createServer as createHttpsServer } from 'https'
33
import { createServer } from 'http'
4-
import { resolve } from 'path'
4+
import { resolve, posix } from 'path'
55

66
import mime from 'mime'
77
import opener from 'opener'
@@ -23,9 +23,16 @@ function serve (options = { contentBase: '' }) {
2323
options.openPage = options.openPage || ''
2424
mime.default_type = 'text/plain'
2525

26+
if (options.mimeTypes) {
27+
mime.define(options.mimeTypes, true)
28+
}
29+
2630
const requestListener = (request, response) => {
2731
// Remove querystring
28-
const urlPath = decodeURI(request.url.split('?')[0])
32+
const unsafePath = decodeURI(request.url.split('?')[0])
33+
34+
// Don't allow path traversal
35+
const urlPath = posix.normalize(unsafePath)
2936

3037
Object.keys(options.headers).forEach((key) => {
3138
response.setHeader(key, options.headers[key])
@@ -72,11 +79,10 @@ function serve (options = { contentBase: '' }) {
7279
server = createServer(requestListener).listen(options.port, options.host)
7380
}
7481

75-
// assemble url for error and info messages
76-
const protocol = (options.https ? 'https' : 'http')
77-
const hostname = options.host || 'localhost'
78-
const url = protocol + '://' + hostname + ':' + options.port
82+
// Assemble url for error and info messages
83+
const url = (options.https ? 'https' : 'http') + '://' + (options.host || 'localhost') + ':' + options.port
7984

85+
// Handle common server errors
8086
server.on('error', e => {
8187
if (e.code === 'EADDRINUSE') {
8288
console.error(url + ' is in use, either stop the other server or use a different port.')
@@ -86,18 +92,20 @@ function serve (options = { contentBase: '' }) {
8692
}
8793
})
8894

89-
let running = options.verbose === false
95+
let first = true
9096

9197
return {
9298
name: 'serve',
9399
generateBundle () {
94-
if (!running) {
95-
running = true
100+
if (first) {
101+
first = false
96102

97103
// Log which url to visit
98-
options.contentBase.forEach(base => {
99-
console.log(green(url) + ' -> ' + resolve(base))
100-
})
104+
if (options.verbose !== false) {
105+
options.contentBase.forEach(base => {
106+
console.log(green(url) + ' -> ' + resolve(base))
107+
})
108+
}
101109

102110
// Open browser
103111
if (options.open) {
@@ -147,7 +155,7 @@ function green (text) {
147155
return '\u001b[1m\u001b[32m' + text + '\u001b[39m\u001b[22m'
148156
}
149157

150-
function closeServerOnTermination() {
158+
function closeServerOnTermination () {
151159
const terminationSignals = ['SIGINT', 'SIGTERM', 'SIGQUIT', 'SIGHUP']
152160
terminationSignals.forEach(signal => {
153161
process.on(signal, () => {

test/rollup.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import serve from '..'
1+
import serve from '../src/index.js'
22

33
export default {
44
input: 'entry.js',

0 commit comments

Comments
 (0)