| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | "use strict";var queryString = require("qs");var proto = exports;var instanceMethods = ["exit", "notify", "pause", "resume"];var getBody = require("raw-body");const permittedSocketEvents = [    "file:reload",    "browser:reload",    "browser:notify",    "browser:location",    "options:set"];/** * Does the requested method expect an instance of BrowserSync * or raw access to the emitter? * @param method * @returns {boolean} */function methodRequiresInstance(method) {    return instanceMethods.indexOf(method) > -1;}/** * Use BrowserSync options + querystring to create a * full HTTP/HTTTPS url. * * Eg. http://localhost:3000/__browser_sync__?method=reload * Eg. http://localhost:3000/__browser_sync__?method=reload&args=core.css * Eg. http://localhost:3000/__browser_sync__?method=reload&args=core.css&args=core.min * * @param args * @param url * @returns {string} */proto.getUrl = function (args, url) {    return [        url,        require("./config").httpProtocol.path,        "?",        queryString.stringify(args)    ].join("");};/** * Return a middleware for handling the requests * @param {BrowserSync} bs * @returns {Function} */proto.middleware = function (bs) {    return function (req, res) {        if (req.method === "POST") {            return getBody(req, function (err, body) {                if (err) {                    const output = ["Error: could not parse JSON."];                    res.writeHead(500, { "Content-Type": "text/plain" });                    return res.end(output.join("\n"));                }                try {                    const [name, payload] = JSON.parse(body.toString());                    bs.io.sockets.emit(name, payload);                    return res.end(`Browsersync HTTP Protocol received: ${name} ${JSON.stringify(payload)}`);                }                catch (e) {                    const output = [`Error: ${e.message}`];                    res.writeHead(500, { "Content-Type": "text/plain" });                    return res.end(output.join("\n"));                }            });        }        var params = queryString.parse(req.url.replace(/^.*\?/, ""));        var output;        if (!Object.keys(params).length) {            output = [                "Error: No Parameters were provided.",                "Example: http://localhost:3000/__browser_sync__?method=reload&args=core.css"            ];            res.writeHead(500, { "Content-Type": "text/plain" });            res.end(output.join("\n"));            return;        }        try {            var bsOrEmitter = methodRequiresInstance(params.method)                ? bs                : bs.events;            require("./public/" + params.method)(bsOrEmitter).apply(null, [                params.args            ]);            output = [                "Called public API method `.%s()`".replace("%s", params.method),                "With args: " + JSON.stringify(params.args)            ];            res.end(output.join("\n"));        }        catch (e) {            res.writeHead(404, { "Content-Type": "text/plain" });            res.write("Public API method `" + params.method + "` not found.");            res.end();            return;        }    };};//# sourceMappingURL=http-protocol.js.map
 |