Skip to content

Commit 8572f06

Browse files
committed
feat(middleware): accept route/handler in plain objects
1 parent 55749b0 commit 8572f06

3 files changed

Lines changed: 85 additions & 16 deletions

File tree

bin/browser-sync.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ if (!module.parent) {
2020

2121
var argv = yargs.argv;
2222
var command = argv._[0];
23+
var valid = ["start", "init", "reload", "recipe"];
2324

24-
var valid = ["start", "init", "reload", "recipe"];
2525
if (valid.indexOf(command) > -1) {
2626
handleIncoming(command, yargs.reset());
2727
} else {

lib/server/utils.js

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
"use strict";
22

3-
var fs = require("fs");
4-
var filePath = require("path");
5-
var connect = require("connect");
6-
var http = require("http");
7-
var https = require("https");
8-
var snippet = require("./../snippet").utils;
3+
var fs = require("fs");
4+
var filePath = require("path");
5+
var connect = require("connect");
6+
var http = require("http");
7+
var https = require("https");
8+
var Map = require("immutable").Map;
9+
var snippet = require("./../snippet").utils;
910

1011
var utils = {
1112
/**
@@ -77,14 +78,37 @@ var utils = {
7778
/**
7879
* Add user-provided middlewares
7980
*/
80-
options.get("middleware").forEach(function (item) {
81-
if (typeof item === "function") {
82-
return app.use(item);
83-
}
84-
if ((item.route !== undefined) && item.handle) {
81+
options.get("middleware")
82+
.map(function (item) {
83+
/**
84+
* Object given in options, which
85+
* ended up being a Map
86+
*/
87+
if (Map.isMap(item)) {
88+
return item.toJS();
89+
}
90+
/**
91+
* Single function
92+
*/
93+
if (typeof item === "function") {
94+
return {
95+
route: "",
96+
handle: item
97+
}
98+
}
99+
/**
100+
* Plain obj
101+
*/
102+
if ((item.route !== undefined) && item.handle) {
103+
return item;
104+
}
105+
})
106+
.forEach(function (item) {
107+
/**
108+
* Add each middleware
109+
*/
85110
app.stack.push(item);
86-
}
87-
});
111+
});
88112

89113
return app;
90114
},

test/specs/e2e/middleware/middleware.option.js

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
var browserSync = require("../../../../index");
44
var assert = require("chai").assert;
5+
var request = require("supertest");
56

6-
describe("Accepting middleware as an option", function () {
7+
describe("Accepting middleware as an option (1)", function () {
78

89
var bs;
910

@@ -36,7 +37,7 @@ describe("Accepting middleware as an option", function () {
3637
});
3738
});
3839

39-
describe("Accepting middleware as an option", function () {
40+
describe("Accepting middleware as an option (2)", function () {
4041

4142
var bs;
4243

@@ -71,3 +72,47 @@ describe("Accepting middleware as an option", function () {
7172
assert.equal(bs.options.get("middleware").size, 2);
7273
});
7374
});
75+
76+
describe("Accepting middleware as a plain object", function () {
77+
78+
it("should accept middlewares with routes", function (done) {
79+
browserSync.reset();
80+
81+
var called = 0;
82+
var mw1 = function myMiddleware(req, res, next) {
83+
called += 1;
84+
next();
85+
};
86+
var mw2 = function bodyResp(req, res) {
87+
called += 1;
88+
res.end("<html><body>MW2</body></html>");
89+
};
90+
var config = {
91+
server: {
92+
baseDir: "test/fixtures"
93+
},
94+
middleware: [
95+
mw1,
96+
{
97+
route: "/shane",
98+
handle: mw2
99+
}
100+
],
101+
logLevel: "silent",
102+
open: false
103+
};
104+
105+
browserSync.init(config, function (err, bs) {
106+
request(bs.server)
107+
.get("/")
108+
.set("accept", "text/html")
109+
.expect(200)
110+
.end(function () {
111+
assert.equal(called, 1, "should call the first middleware");
112+
bs.cleanup();
113+
done();
114+
});
115+
});
116+
117+
});
118+
});

0 commit comments

Comments
 (0)