From 525fff9011f72378e70e57fbe682c6775084e231 Mon Sep 17 00:00:00 2001 From: Shane Osbourne Date: Thu, 24 Jun 2021 17:38:12 +0100 Subject: [PATCH] feat: added option `snippet: boolean` - fixes #1882 --- package-lock.json | 42 +++++++++---------- packages/browser-sync/lib/async.js | 4 +- packages/browser-sync/lib/connect-utils.js | 12 ++++++ packages/browser-sync/lib/server/utils.js | 14 ++++--- packages/browser-sync/package.json | 1 + .../test/specs/e2e/e2e.options.snippet.js | 37 +++++++++++++++- 6 files changed, 80 insertions(+), 30 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b72d4d7d..00889c9c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3470,9 +3470,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -3507,9 +3507,9 @@ "dev": true }, "handlebars": { - "version": "4.7.6", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", - "integrity": "sha512-1f2BACcBfiwAfStCKZNrUCgqNZkGsAT7UM3kkYtXuLo0KnaVfjKOyf7PRzB6++aK9STyT1Pd2ZCPe3EGOXleXA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -4276,9 +4276,9 @@ } }, "lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash._reinterpolate": { @@ -4454,9 +4454,9 @@ } }, "hosted-git-info": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz", - "integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", + "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -6265,9 +6265,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -6568,9 +6568,9 @@ } }, "trim-newlines": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.0.tgz", - "integrity": "sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "trim-off-newlines": { @@ -6613,9 +6613,9 @@ "dev": true }, "uglify-js": { - "version": "3.12.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.5.tgz", - "integrity": "sha512-SgpgScL4T7Hj/w/GexjnBHi3Ien9WS1Rpfg5y91WXMj9SY997ZCQU76mH4TpLwwfmMvoOU8wiaRkIf6NaH3mtg==", + "version": "3.13.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.9.tgz", + "integrity": "sha512-wZbyTQ1w6Y7fHdt8sJnHfSIuWeDgk6B5rCb4E/AM6QNNPbOMIZph21PW5dRB3h7Df0GszN+t7RuUH6sWK5bF0g==", "dev": true, "optional": true }, diff --git a/packages/browser-sync/lib/async.js b/packages/browser-sync/lib/async.js index 7d0604fe8..73d5713f3 100644 --- a/packages/browser-sync/lib/async.js +++ b/packages/browser-sync/lib/async.js @@ -152,7 +152,9 @@ module.exports = { done(null, { options: { urls: utils.getUrlOptions(bs.options), - snippet: connectUtils.scriptTags(bs.options), + snippet: connectUtils.enabled(bs.options) + ? connectUtils.scriptTags(bs.options) + : false, scriptPaths: Immutable.fromJS( connectUtils.clientScript(bs.options, true) ), diff --git a/packages/browser-sync/lib/connect-utils.js b/packages/browser-sync/lib/connect-utils.js index dcc7c440e..10d2394b3 100644 --- a/packages/browser-sync/lib/connect-utils.js +++ b/packages/browser-sync/lib/connect-utils.js @@ -13,6 +13,18 @@ function getPath(options, relative, port) { } var connectUtils = { + /** + * Allow users to disable the Browsersync snippet + * @param {Immutable.Map} options + * @returns {Boolean} + */ + enabled: function(options) { + const userValue = options.get("snippet"); + if (typeof userValue === "boolean") { + return userValue + } + return true + }, /** * @param {Immutable.Map} options * @returns {String} diff --git a/packages/browser-sync/lib/server/utils.js b/packages/browser-sync/lib/server/utils.js index 8e3862162..91f7fa534 100644 --- a/packages/browser-sync/lib/server/utils.js +++ b/packages/browser-sync/lib/server/utils.js @@ -304,12 +304,14 @@ var serverUtils = { ); // Snippet - rules.push( - snippetUtils.getRegex( - bs.options.get("snippet"), - bs.options.get("snippetOptions") - ) - ); + if (bs.options.get("snippet")) { + rules.push( + snippetUtils.getRegex( + bs.options.get("snippet"), + bs.options.get("snippetOptions") + ) + ); + } // User bs.options.get("rewriteRules").forEach(function(rule) { diff --git a/packages/browser-sync/package.json b/packages/browser-sync/package.json index f1f4b26fd..177f1fc50 100644 --- a/packages/browser-sync/package.json +++ b/packages/browser-sync/package.json @@ -23,6 +23,7 @@ "scripts": { "build": "npm run build:server", "build:server": "tsc", + "build:watch": "tsc --watch", "env": "node ./test/env.js", "lodash": "lodash include=isUndefined,isFunction,toArray,includes,union,each,isString,merge,isObject,set exports=node", "prepublishOnly": "npm run build", diff --git a/packages/browser-sync/test/specs/e2e/e2e.options.snippet.js b/packages/browser-sync/test/specs/e2e/e2e.options.snippet.js index 66266d500..485cc218e 100644 --- a/packages/browser-sync/test/specs/e2e/e2e.options.snippet.js +++ b/packages/browser-sync/test/specs/e2e/e2e.options.snippet.js @@ -166,8 +166,41 @@ describe("E2E snippet: false", function() { .set("accept", "text/html") .expect(200) .end(function(err, res) { - if (res.text.indexOf(instance.options.get("snippet")) > -1) { - return done(new Error("snippet present")); + if (res.text.indexOf("__bs_script__") > -1) { + return done(new Error("snippet present when it shouldn't be")); + } + done(); + }); + }); +}); + +describe("E2E snippet: true", function() { + var instance; + + before(function(done) { + browserSync.reset(); + var config = { + server: { + baseDir: "test/fixtures" + }, + open: false, + snippet: true, + }; + instance = browserSync(config, done).instance; + }); + + after(function() { + instance.cleanup(); + }); + + it("does not add the snippet when snippet: false", function(done) { + request(instance.server) + .get("/iframe.html") + .set("accept", "text/html") + .expect(200) + .end(function(err, res) { + if (res.text.indexOf("__bs_script__") === -1) { + return done(new Error("snippet absent when it shouldn't be")); } done(); });