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
|