function browserSyncThroughStream(opts) {
        opts = opts || {};
        var emitted = false;
        var Transform = require("stream").Transform;
        var reload = new Transform({ objectMode: true });
        var changed = [];

        reload._transform = function(file, encoding, next) {
            var stream = this;

            /**
             * End is always called to send the current file down
             * stream. Browsersync never acts upon a stream,
             * we only `listen` to it.
             */
            function end() {
                stream.push(file); // always send the file down-stream
                next();
            }

            /**
             * If {match: <pattern>} was provided, test the
             * current filepath against it
             */
            if (opts.match) {
                if (!micromatch(file.path, opts.match, { dot: true }).length) {
                    return end();
                }
            }

            /**
             * if {once: true} provided, emit the reload event for the
             * first file only
             */
            if (opts.once === true && !emitted) {
                utils.emitBrowserReload(emitter);

                emitted = true;
            } else {
                // handle multiple

                if (opts.once === true && emitted) {
                } else {
                    if (file.path) {
                        emitted = true;
                        utils.emitChangeEvent(emitter, file.path, false);
                        changed.push(path.basename(file.path));
                    }
                }
            }

            end();
        };

        /**
         * When this current operation has finished, emit the
         * steam:changed event so that any loggers can pick up it
         * @param next
         * @private
         */
        reload._flush = function(next) {
            if (changed.length) {
                utils.emitStreamChangedEvent(emitter, changed);
            }

            next();
        };

        return reload;
    }
Return a transform/through stream that listens to file
paths and fires internal Browsersync events.
@param {{once: boolean, match: string|array}} [opts]
@returns {Stream.Transform}