Skip to content

Commit

Permalink
feat: add 'single' flag to put Browsersync into SPA mode
Browse files Browse the repository at this point in the history
  • Loading branch information
shakyShane committed Dec 26, 2017
1 parent b5cc56e commit 91480aa
Show file tree
Hide file tree
Showing 5 changed files with 76 additions and 131 deletions.
4 changes: 4 additions & 0 deletions cli-options/opts.start.json
Expand Up @@ -60,6 +60,10 @@
"type": "string",
"desc": "Specify the start path for the opened browser"
},
"single": {
"type": "boolean",
"desc": "If true, the connect-history-api-fallback middleware will be added"
},
"https": {
"desc": "Enable SSL for local development"
},
Expand Down
11 changes: 11 additions & 0 deletions lib/server/utils.js
Expand Up @@ -181,6 +181,17 @@ var serverUtils = {
});
}

/**
* Add connect-history-api-fallback if 'single' argument given
*/
if (bs.options.get("single")) {
defaultMiddlewares.unshift({
id: "Browsersync SPA support",
route: "",
handle: require('connect-history-api-fallback')()
});
}

/**
* Add serve static middleware
*/
Expand Down
5 changes: 3 additions & 2 deletions package.json
Expand Up @@ -35,11 +35,11 @@
"prepublish": "tsc"
},
"dependencies": {
"@types/node": "^8.5.2",
"browser-sync-ui": "v1.0.1",
"bs-recipes": "1.3.4",
"chokidar": "1.7.0",
"connect": "3.5.0",
"connect-history-api-fallback": "^1.5.0",
"dev-ip": "^1.0.1",
"easy-extender": "2.3.2",
"eazy-logger": "3.0.2",
Expand All @@ -60,11 +60,11 @@
"serve-static": "1.12.2",
"server-destroy": "1.0.1",
"socket.io": "2.0.4",
"socket.io-client": "1.6.0",
"ua-parser-js": "0.7.12",
"yargs": "6.4.0"
},
"devDependencies": {
"@types/node": "^8.5.2",
"browser-sync-spa": "1.0.3",
"bs-html-injector": "3.0.3",
"bs-latency": "1.0.0",
Expand All @@ -90,6 +90,7 @@
"requirejs": "^2.3.5",
"rimraf": "2.5.4",
"sinon": "1.17.5",
"socket.io-client": "^2.0.4",
"source-map-support": "^0.5.0",
"supertest": "2.0.0",
"typescript": "^2.6.2",
Expand Down
54 changes: 54 additions & 0 deletions test/specs/e2e/e2e.options.single.js
@@ -0,0 +1,54 @@
var browserSync = require("../../../");

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

describe("e2e options test (single)", function() {
it("returns index.html content for a non-existing path", function(done) {
browserSync.reset();
var config = {
server: {
baseDir: "test/fixtures"
},
open: false,
logLevel: "silent",
cors: true,
single: true
};
browserSync(config, function(err, bs) {
request(bs.server)
.get("/a-path-that-deffo-doesnot-exist")
.set('accept', '*/*')
.expect(200)
.end(function(err, res) {
const expected = fs.readFileSync('test/fixtures/index.html', 'utf8');
assert.equal(res.text, expected);
bs.cleanup(done);
});
});
});
it("returns regular content for matching file path", function(done) {
browserSync.reset();
var config = {
server: {
baseDir: "test/fixtures"
},
open: false,
logLevel: "silent",
cors: true,
single: true
};
browserSync(config, function(err, bs) {
request(bs.server)
.get("/assets/style.css")
.expect(200)
.end(function(err, res) {
const expected = fs.readFileSync('test/fixtures/assets/style.css', 'utf8');
assert.equal(res.text, expected);
bs.cleanup(done);
});
});
});
});
133 changes: 4 additions & 129 deletions yarn.lock
Expand Up @@ -45,10 +45,6 @@ add-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa"

after@0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/after/-/after-0.8.1.tgz#ab5d4fb883f596816d3515f8f791c0af486dd627"

after@0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f"
Expand Down Expand Up @@ -618,10 +614,6 @@ component-bind@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1"

component-emitter@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.1.2.tgz#296594f2753daa63996d2af08d15a95116c9aec3"

component-emitter@1.2.1, component-emitter@^1.2.0, component-emitter@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
Expand Down Expand Up @@ -663,7 +655,7 @@ connect-history-api-fallback@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-0.0.5.tgz#ef0509d0040bfbc486eab5f7f500bb1769cf354a"

connect-history-api-fallback@^1.1.0:
connect-history-api-fallback@^1.1.0, connect-history-api-fallback@^1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"

Expand Down Expand Up @@ -901,12 +893,6 @@ debug@2.2.0, debug@~2.2.0:
dependencies:
ms "0.7.1"

debug@2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.3.3.tgz#40c453e67e6e13c901ddec317af8986cda9eff8c"
dependencies:
ms "0.7.2"

debug@2.6.0:
version "2.6.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
Expand Down Expand Up @@ -1095,23 +1081,6 @@ end-of-stream@~0.1.5:
dependencies:
once "~1.3.0"

engine.io-client@1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-1.8.0.tgz#7b730e4127414087596d9be3c88d2bc5fdb6cf5c"
dependencies:
component-emitter "1.2.1"
component-inherit "0.0.3"
debug "2.3.3"
engine.io-parser "1.3.1"
has-cors "1.1.0"
indexof "0.0.1"
parsejson "0.0.3"
parseqs "0.0.5"
parseuri "0.0.5"
ws "1.1.1"
xmlhttprequest-ssl "1.5.3"
yeast "0.1.2"

engine.io-client@~3.1.0:
version "3.1.4"
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1"
Expand All @@ -1128,17 +1097,6 @@ engine.io-client@~3.1.0:
xmlhttprequest-ssl "~1.5.4"
yeast "0.1.2"

engine.io-parser@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-1.3.1.tgz#9554f1ae33107d6fbd170ca5466d2f833f6a07cf"
dependencies:
after "0.8.1"
arraybuffer.slice "0.0.6"
base64-arraybuffer "0.1.5"
blob "0.0.4"
has-binary "0.1.6"
wtf-8 "1.0.0"

engine.io-parser@~2.1.0, engine.io-parser@~2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.1.tgz#e0fb3f0e0462f7f58bb77c1a52e9f5a7e26e4668"
Expand Down Expand Up @@ -1195,10 +1153,6 @@ esprima@2.7.x, esprima@^2.6.0, esprima@^2.7.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"

esprima@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"

estraverse@^1.9.1:
version "1.9.3"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
Expand Down Expand Up @@ -1831,18 +1785,6 @@ has-binary2@~1.0.2:
dependencies:
isarray "2.0.1"

has-binary@0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.6.tgz#25326f39cfa4f616ad8787894e3af2cfbc7b6e10"
dependencies:
isarray "0.0.1"

has-binary@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/has-binary/-/has-binary-0.1.7.tgz#68e61eb16210c9545a0a5cce06a873912fe1e68c"
dependencies:
isarray "0.0.1"

has-cors@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
Expand Down Expand Up @@ -2294,7 +2236,7 @@ istanbul@0.4.5:
which "^1.1.1"
wordwrap "^1.0.0"

js-yaml@3.6.0:
js-yaml@3.6.0, js-yaml@3.x:
version "3.6.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.0.tgz#3b7bf3256dd598f60f8b6f8ea75514a585a24dc6"
dependencies:
Expand All @@ -2308,13 +2250,6 @@ js-yaml@3.6.1:
argparse "^1.0.7"
esprima "^2.6.0"

js-yaml@3.x:
version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"

jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
Expand Down Expand Up @@ -3090,18 +3025,12 @@ on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"

once@1.3.3, once@~1.3.0:
once@1.3.3, once@1.x, once@^1.3.0, once@^1.3.3, once@~1.3.0:
version "1.3.3"
resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
dependencies:
wrappy "1"

once@1.x, once@^1.3.0, once@^1.3.3:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
dependencies:
wrappy "1"

once@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.2.0.tgz#de1905c636af874a8fba862d9aabddd1f920461c"
Expand Down Expand Up @@ -3146,10 +3075,6 @@ optionator@^0.8.1:
type-check "~0.3.2"
wordwrap "~1.0.0"

options@>=0.0.5:
version "0.0.6"
resolved "https://registry.yarnpkg.com/options/-/options-0.0.6.tgz#ec22d312806bb53e731773e7cdaefcf1c643128f"

orchestrator@^0.3.0:
version "0.3.8"
resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
Expand Down Expand Up @@ -3218,12 +3143,6 @@ parse5@^1.4.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"

parsejson@0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/parsejson/-/parsejson-0.0.3.tgz#ab7e3759f209ece99437973f7d0f1f64ae0e64ab"
dependencies:
better-assert "~1.0.0"

parseqs@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d"
Expand Down Expand Up @@ -3754,23 +3673,7 @@ socket.io-adapter@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b"

socket.io-client@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-1.6.0.tgz#5b668f4f771304dfeed179064708386fa6717853"
dependencies:
backo2 "1.0.2"
component-bind "1.0.0"
component-emitter "1.2.1"
debug "2.3.3"
engine.io-client "1.8.0"
has-binary "0.1.7"
indexof "0.0.1"
object-component "0.0.3"
parseuri "0.0.5"
socket.io-parser "2.3.1"
to-array "0.1.4"

socket.io-client@2.0.4:
socket.io-client@2.0.4, socket.io-client@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e"
dependencies:
Expand All @@ -3788,15 +3691,6 @@ socket.io-client@2.0.4:
socket.io-parser "~3.1.1"
to-array "0.1.4"

socket.io-parser@2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-2.3.1.tgz#dd532025103ce429697326befd64005fcfe5b4a0"
dependencies:
component-emitter "1.1.2"
debug "2.2.0"
isarray "0.0.1"
json3 "3.3.2"

socket.io-parser@~3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2"
Expand Down Expand Up @@ -4225,10 +4119,6 @@ uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"

ultron@1.0.x:
version "1.0.2"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.0.2.tgz#ace116ab557cd197386a4e88f4685378c8b2e4fa"

ultron@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
Expand Down Expand Up @@ -4427,13 +4317,6 @@ wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"

ws@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.1.tgz#082ddb6c641e85d4bb451f03d52f06eabdb1f018"
dependencies:
options ">=0.0.5"
ultron "1.0.x"

ws@~3.3.1:
version "3.3.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
Expand All @@ -4442,10 +4325,6 @@ ws@~3.3.1:
safe-buffer "~5.1.0"
ultron "~1.1.0"

wtf-8@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wtf-8/-/wtf-8-1.0.0.tgz#392d8ba2d0f1c34d1ee2d630f15d0efb68e1048a"

"xml-name-validator@>= 2.0.1 < 3.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
Expand All @@ -4454,10 +4333,6 @@ xmldom@0.1.16:
version "0.1.16"
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.16.tgz#cf2602832b1ab5c3e6813fca08fe70196ba15e8c"

xmlhttprequest-ssl@1.5.3:
version "1.5.3"
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz#185a888c04eca46c3e4070d99f7b49de3528992d"

xmlhttprequest-ssl@~1.5.4:
version "1.5.4"
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz#04f560915724b389088715cc0ed7813e9677bf57"
Expand Down

0 comments on commit 91480aa

Please sign in to comment.