Skip to content

Commit 9ee6e6e

Browse files
adamkissjescalan
authored andcommitted
Browser sync proxy (#261)
* Add (optional) server.proxy key, with additional check for server.server * Add forgotten check before setting baseDir
1 parent f9a43d6 commit 9ee6e6e

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

lib/config.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,15 @@ module.exports = class Config {
6868
watchOptions: Joi.object().default().keys({
6969
ignored: Joi.array().default('node_modules')
7070
}),
71-
server: Joi.object().default({}),
71+
server: Joi.default({})
72+
.when('proxy', { is: Joi.exist(),
73+
then: Joi.required().only(false),
74+
otherwise: Joi.object()
75+
}),
76+
proxy: Joi.alternatives().try(
77+
Joi.object().keys({ target: Joi.string().required() }),
78+
Joi.string()
79+
).optional(),
7280
port: Joi.number().default(1111),
7381
middleware: Joi.array().default([]),
7482
logLevel: Joi.string().default('silent'),
@@ -83,7 +91,9 @@ module.exports = class Config {
8391
let res = validation.value
8492

8593
// Joi can't handle defaulting this, so we do it manually
86-
res.server.server.baseDir = res.outputDir.replace(res.root, '')
94+
if (res.server.server) {
95+
res.server.server.baseDir = res.outputDir.replace(res.root, '')
96+
}
8797

8898
// add cleanUrls middleware to browserSync if cleanUrls === true
8999
if (res.cleanUrls) {

test/config_errors.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@ test('config errors', (t) => {
1414
'ValidationError: child "babel" fails because ["babel" must be an object]')
1515
t.throws(() => { new Spike({ root: 'foo', entry: ['foo', 'bar'] }) }, // eslint-disable-line
1616
'ValidationError: child "entry" fails because ["entry" must be an object]')
17+
t.throws(() => { new Spike({ root: 'foo', server: {server: false} }) }, // eslint-disable-line
18+
'ValidationError: child "server" fails because [child "server" fails because ["server" must be an object]]')
19+
t.throws(() => { new Spike({ root: 'foo', server: {server: {}, proxy: 'http://localhost:1234/'} }) }, // eslint-disable-line
20+
'ValidationError: child "server" fails because [child "server" fails because ["server" must be one of [false]]]')
1721
})

0 commit comments

Comments
 (0)