Skip to content

Commit 5c26e69

Browse files
committed
internal: add setRewriteRules method + an id on built ins
1 parent 2c943c6 commit 5c26e69

4 files changed

Lines changed: 137 additions & 1 deletion

File tree

lib/browser-sync.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,22 @@ BrowserSync.prototype.addRewriteRule = function (rule) {
616616
}
617617
};
618618

619+
/**
620+
* Completely replace all rules
621+
* @param {Array} rules
622+
*/
623+
BrowserSync.prototype.setRewriteRules = function (rules) {
624+
var bs = this;
625+
626+
if (bs.options.get("mode") === "server") {
627+
bs.snippetMw.opts.rules = rules;
628+
}
629+
630+
if (bs.options.get("mode") === "proxy") {
631+
bs.proxy.config.rules = rules;
632+
}
633+
};
634+
619635
/**
620636
* Handle Browser Reloads
621637
*/

lib/snippet.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ var utils = {
4444
return {
4545
match: options.getIn(["rule", "match"]),
4646
fn: fn,
47-
once: true
47+
once: true,
48+
id: "bs-snippet"
4849
};
4950
},
5051
getSnippetMiddleware: function (snippet, options, rewriteRules) {
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
"use strict";
2+
3+
var browserSync = require("../../../../index");
4+
5+
var connect = require("connect");
6+
var serveStatic = require("serve-static");
7+
var request = require("supertest");
8+
var assert = require("chai").assert;
9+
10+
describe("E2E proxy test with replacing rewrite rules dynamically", function () {
11+
12+
var bs, server, options;
13+
14+
before(function (done) {
15+
16+
browserSync.reset();
17+
18+
var app = connect();
19+
app.use(serveStatic("test/fixtures"));
20+
server = app.listen();
21+
var proxytarget = "http://localhost:" + server.address().port;
22+
23+
var config = {
24+
proxy: proxytarget,
25+
logLevel: "silent",
26+
open: false,
27+
rewriteRules: [
28+
{
29+
match: /BrowserSync/g,
30+
fn: function () {
31+
return "BROWSERSYNC";
32+
}
33+
}
34+
]
35+
};
36+
37+
bs = browserSync.init([], config, function (err, bs) {
38+
options = bs.options;
39+
done();
40+
}).instance;
41+
});
42+
43+
after(function () {
44+
bs.cleanup();
45+
server.close();
46+
});
47+
48+
it("can add rules on the fly", function (done) {
49+
50+
request(bs.server)
51+
.get("/index.html")
52+
.set("accept", "text/html")
53+
.expect(200)
54+
.end(function (err, res) {
55+
56+
assert.include(res.text, "BROWSERSYNC");
57+
58+
bs.setRewriteRules([]);
59+
60+
request(bs.server)
61+
.get("/index.html")
62+
.set("accept", "text/html")
63+
.expect(200)
64+
.end(function (err, res) {
65+
assert.include(res.text, "BrowserSync");
66+
done();
67+
});
68+
});
69+
});
70+
});
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
"use strict";
2+
3+
var browserSync = require("../../../../index");
4+
5+
var request = require("supertest");
6+
var assert = require("chai").assert;
7+
8+
describe("E2E server test with rewrite rules replaced on the fly", function () {
9+
10+
var bs;
11+
12+
before(function (done) {
13+
14+
browserSync.reset();
15+
16+
var config = {
17+
server: {
18+
baseDir: "test/fixtures"
19+
},
20+
logLevel: "silent",
21+
open: false
22+
};
23+
24+
bs = browserSync.init(config, done).instance;
25+
});
26+
27+
after(function () {
28+
bs.cleanup();
29+
});
30+
31+
it("serves files with HTML rewritten", function (done) {
32+
33+
bs.setRewriteRules([{
34+
match: /Forms/g,
35+
fn: function () {
36+
return "Shane's forms";
37+
}
38+
}]);
39+
40+
request(bs.server)
41+
.get("/index.html")
42+
.set("accept", "text/html")
43+
.expect(200)
44+
.end(function (err, res) {
45+
assert.include(res.text, "Shane's forms");
46+
done();
47+
});
48+
});
49+
});

0 commit comments

Comments
 (0)