From b5cc56e64d906eaddc897bf34bb07dc5b4bf3c9c Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Tue, 26 Dec 2017 21:16:31 +0000 Subject: [PATCH] feat: add directory listing for serve-static mode --- lib/browser-sync.js | 13 ++++++------ lib/server/static-server.js | 6 ++++-- lib/server/utils.js | 26 ++++++++++++++++-------- test/specs/e2e/server/e2e.server.dirs.js | 26 ------------------------ 4 files changed, 29 insertions(+), 42 deletions(-) diff --git a/lib/browser-sync.js b/lib/browser-sync.js index 764e1919e..2b567e91a 100644 --- a/lib/browser-sync.js +++ b/lib/browser-sync.js @@ -366,15 +366,16 @@ BrowserSync.prototype.serveFile = function(path, props) { /** * Add middlewares on the fly - * @param {{route: string, handle: function, id?: string}} */ BrowserSync.prototype._addMiddlewareToStack = function(entry) { var bs = this; - if (bs.options.get("mode") === "proxy") { - bs.app.stack.splice(bs.app.stack.length - 1, 0, entry); - } else { - bs.app.stack.push(entry); - } + + /** + * additional middlewares are always appended -1, + * this is to allow the proxy middlewares to remain, + * and the directory index to remain in serveStatic/snippet modes + */ + bs.app.stack.splice(bs.app.stack.length - 1, 0, entry); }; var _addMiddlewareCount = 0; diff --git a/lib/server/static-server.js b/lib/server/static-server.js index bc7a2eeeb..97c7943d9 100644 --- a/lib/server/static-server.js +++ b/lib/server/static-server.js @@ -9,7 +9,6 @@ var serveIndex = require("serve-index"); /** * @param {BrowserSync} bs - * @param scripts * @returns {*} */ module.exports = function createServer(bs) { @@ -31,7 +30,10 @@ module.exports = function createServer(bs) { return mw.concat({ route: "", - handle: serveIndex(resolve(basedirs[0]), { icons: true }), + handle: serveIndex(resolve(basedirs[0]), { + icons: true, + view: "details" + }), id: "Browsersync Server Directory Middleware" }); }) diff --git a/lib/server/utils.js b/lib/server/utils.js index 9f97fd2ea..b6a979dd2 100644 --- a/lib/server/utils.js +++ b/lib/server/utils.js @@ -13,6 +13,7 @@ var List = require("immutable").List; var snippet = require("./../snippet").utils; var _ = require("../lodash.custom"); var serveStatic = require("serve-static"); +var serveIndex = require("serve-index"); var logger = require("../logger"); var snippetUtils = require("../snippet").utils; var lrSnippet = require("resp-modifier"); @@ -224,15 +225,24 @@ var serverUtils = { var beforeMiddlewares = userMiddlewares.filter(function(x) { return x.override; }); - var afterMiddlewares = userMiddlewares.filter(function(x) { - return !x.override; - }); + var afterMiddlewares = userMiddlewares + .filter(function(x) { + return !x.override; + }) + .concat( + bs.options.get("mode") !== "proxy" && { + id: "Browsersync 404/index support", + route: "", + handle: serveIndex(bs.options.get("cwd"), { + icons: true, + view: "details" + }) + } + ); - return [].concat( - beforeMiddlewares, - defaultMiddlewares, - afterMiddlewares - ); + return [] + .concat(beforeMiddlewares, defaultMiddlewares, afterMiddlewares) + .filter(Boolean); function normaliseMiddleware(item) { /** diff --git a/test/specs/e2e/server/e2e.server.dirs.js b/test/specs/e2e/server/e2e.server.dirs.js index e4bb18e3f..47ff625c2 100644 --- a/test/specs/e2e/server/e2e.server.dirs.js +++ b/test/specs/e2e/server/e2e.server.dirs.js @@ -133,29 +133,3 @@ describe("E2E server test with base dir array option + directory", function() { }); }); }); - -describe("E2E server test with base dir array = false", function() { - it("should ignore the directory option if a falsey value was given", function(done) { - browserSync.reset(); - - var config = { - server: { - baseDir: ["test", "app"], - directory: false - }, - logLevel: "silent", - open: false - }; - - browserSync.init(config, function(err, bs) { - request(bs.server) - .get("/") - .set("accept", "text/html") - .expect(200) - .end(function(err, res) { - assert.notInclude(res.text, "listing directory /"); - done(); - }); - }); - }); -});