Skip to content

Commit

Permalink
feat(rewrite): Allow addtional HTML rewrite rules through server + pr…
Browse files Browse the repository at this point in the history
…oxy modes to help with #514
  • Loading branch information
shakyShane committed Mar 21, 2015
1 parent 2371d22 commit 76ae686
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 9 deletions.
6 changes: 6 additions & 0 deletions lib/default-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,12 @@ module.exports = {
}
},

/**
* @property rewriteRules
* @default false
*/
rewriteRules: false,

/**
* @property tunnel
* @type String|Boolean
Expand Down
7 changes: 6 additions & 1 deletion lib/server/proxy-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,14 @@ function getOptions (bs, scripts) {
var options = bs.options;

var snippetOptions = options.get("snippetOptions").toJS();
var rewrites = [snippetUtils.getRegex(options.get("snippet"), options.get("snippetOptions"))];

if (bs.options.get("rewriteRules")) {
rewrites = rewrites.concat(bs.options.get("rewriteRules").toJS());
}

var out = {
rules: snippetUtils.getRegex(options.get("snippet"), options.get("snippetOptions")),
rules: rewrites,
whitelist: snippetOptions.whitelist,
blacklist: snippetOptions.blacklist,
middleware: options.get("middleware").push(getPluginMiddleware(bs, scripts)),
Expand Down
3 changes: 2 additions & 1 deletion lib/server/static-server.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ module.exports = function createServer (bs, scripts) {
app.use(
snippetUtils.getSnippetMiddleware(
options.get("snippet"),
options.get("snippetOptions")
options.get("snippetOptions"),
options.get("rewriteRules")
)
);

Expand Down
13 changes: 6 additions & 7 deletions lib/snippet.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,13 @@ var utils = {
fn: fn
};
},
/**
* @param {String} snippet
* @param {Object} [options]
* @returns {Function}
*/
getSnippetMiddleware: function (snippet, options) {
getSnippetMiddleware: function (snippet, options, rewriteRules) {
var rules = [utils.getRegex(snippet, options)];
if (rewriteRules) {
rules = rules.concat(rewriteRules.toJS());
}
return lrSnippet({
rules: [utils.getRegex(snippet, options)],
rules: rules,
blacklist: options.get("blacklist").toJS(),
whitelist: options.get("whitelist").toJS()
});
Expand Down
59 changes: 59 additions & 0 deletions test/specs/e2e/proxy/e2e.proxy.rewrite.rules.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
"use strict";

var browserSync = require("../../../../index");

var connect = require("connect");
var serveStatic = require("serve-static");
var request = require("supertest");
var assert = require("chai").assert;

describe("E2E proxy test with rewrite rules", function () {

var instance, server, options;

before(function (done) {

browserSync.reset();

var app = connect();
app.use(serveStatic("./test/fixtures"));
server = app.listen();
var proxytarget = "http://localhost:" + server.address().port;

var config = {
proxy: proxytarget,
logLevel: "silent",
open: false,
rewriteRules: [
{
match: /Forms/g,
fn: function () {
return "Shane's forms";
}
}
]
};

instance = browserSync.init([], config, function (err, bs) {
options = bs.options;
done();
}).instance;
});

after(function () {
instance.cleanup();
server.close();
});

it("serves files with HTML rewritten", function (done) {

request(instance.server)
.get("/index.html")
.set("accept", "text/html")
.expect(200)
.end(function (err, res) {
assert.include(res.text, "Shane's forms");
done();
});
});
});
50 changes: 50 additions & 0 deletions test/specs/e2e/server/e2e.server.rewrite.rules.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
"use strict";

var browserSync = require("../../../../index");

var request = require("supertest");
var assert = require("chai").assert;

describe("E2E server test with rewrite rules", function () {

var instance;

before(function (done) {

browserSync.reset();

var config = {
server: {
baseDir: "test/fixtures"
},
rewriteRules: [
{
match: /Forms/g,
fn: function () {
return "Shane's forms";
}
}
],
logLevel: "silent",
open: false
};

instance = browserSync.init(config, done).instance;
});

after(function () {
instance.cleanup();
});

it("serves files with HTML rewritten", function (done) {

request(instance.server)
.get("/index.html")
.set("accept", "text/html")
.expect(200)
.end(function (err, res) {
assert.include(res.text, "Shane's forms");
done();
});
});
});

0 comments on commit 76ae686

Please sign in to comment.