@@ -420,10 +420,14 @@ BrowserSync.prototype.addMiddleware = function (route, handle, opts) {
420420 } ;
421421
422422 if ( opts . override ) {
423- return bs . app . stack . unshift ( entry ) ;
423+ entry . override = true ;
424424 }
425425
426- bs . _addMiddlewareToStack ( entry ) ;
426+ bs . options = bs . options . update ( "middleware" , function ( mw ) {
427+ return mw . concat ( entry ) ;
428+ } ) ;
429+
430+ bs . resetMiddlewareStack ( ) ;
427431} ;
428432
429433/**
@@ -439,15 +443,13 @@ BrowserSync.prototype.removeMiddleware = function (id) {
439443 return ;
440444 }
441445
442- bs . app . stack = bs . app . stack . filter ( function ( item ) {
443- if ( ! item . id ) {
444- return true ;
445- }
446-
447- return item . id !== id ;
446+ bs . options = bs . options . update ( "middleware" , function ( mw ) {
447+ return mw . filter ( function ( mw ) {
448+ return mw . id !== id ;
449+ } ) ;
448450 } ) ;
449451
450- return bs . app ;
452+ bs . resetMiddlewareStack ( ) ;
451453} ;
452454
453455/**
@@ -586,41 +588,46 @@ BrowserSync.prototype.setMany = function (fn, opts) {
586588 return this . options ;
587589} ;
588590
589- /**
590- * Remove a rewrite rule by id
591- */
592- BrowserSync . prototype . removeRewriteRule = function ( id ) {
591+ BrowserSync . prototype . addRewriteRule = function ( rule ) {
593592 var bs = this ;
594593
595- bs . setRewriteRules ( bs . rewriteRules . filter ( fn ) ) ;
594+ bs . options = bs . options . update ( "rewriteRules" , function ( rules ) {
595+ return rules . concat ( rule ) ;
596+ } ) ;
596597
597- function fn ( item ) {
598- if ( item . id ) {
599- return item . id !== id ;
600- }
601- return true ;
602- }
598+ bs . resetMiddlewareStack ( ) ;
603599} ;
604600
605- /**
606- * Add a new rewrite rule to the stack
607- * @param {Object } rule
608- */
609- BrowserSync . prototype . addRewriteRule = function ( rule ) {
601+ BrowserSync . prototype . removeRewriteRule = function ( id ) {
602+ var bs = this ;
603+ bs . options = bs . options . update ( "rewriteRules" , function ( rules ) {
604+ return rules . filter ( function ( rule ) {
605+ return rule . id !== id ;
606+ } ) ;
607+ } ) ;
608+
609+ bs . resetMiddlewareStack ( ) ;
610+ } ;
611+
612+ BrowserSync . prototype . setRewriteRules = function ( rules ) {
610613 var bs = this ;
614+ bs . options = bs . options . update ( "rewriteRules" , function ( _ ) {
615+ return rules ;
616+ } ) ;
611617
612- bs . setRewriteRules ( bs . rewriteRules . concat ( rule ) ) ;
618+ bs . resetMiddlewareStack ( ) ;
613619} ;
614620
615621/**
616- * Completely replace all rules
617- * @param {Array } rules
622+ * Add a new rewrite rule to the stack
623+ * @param {Object } rule
618624 */
619- BrowserSync . prototype . setRewriteRules = function ( rules ) {
625+ BrowserSync . prototype . resetMiddlewareStack = function ( ) {
626+
620627 var bs = this ;
628+ var middlewares = require ( "./server/utils" ) . getMiddlewares ( bs , bs . options ) ;
621629
622- bs . rewriteRules = rules ;
623- bs . snippetMw . opts . rules = rules ;
630+ bs . app . stack = middlewares ;
624631} ;
625632
626633/**
0 commit comments