UNPKG

masq

Version:

A simple local dns server extracted from Pow

120 lines (101 loc) 3.41 kB
// Generated by CoffeeScript 2.0.0-beta2 (function() { var Configuration, createRequester, debug, defaultEnvironment, exec, fixturePath, fs, http, join, merge, mkdirp, rm_rf, serve, swap, touch; fs = require("fs"); http = require("http"); ({exec} = require("child_process")); ({join} = require("path")); ({Configuration} = require("../..")); exports.merge = merge = function(...objects) { var i, key, len, object, result, value; result = {}; for (i = 0, len = objects.length; i < len; i++) { object = objects[i]; for (key in object) { value = object[key]; result[key] = value; } } return result; }; exports.fixturePath = fixturePath = function(path) { return join(fs.realpathSync(join(__dirname, "..")), "fixtures", path); }; defaultEnvironment = { POW_HOST_ROOT: fixturePath("tmp"), POW_LOG_ROOT: fixturePath("tmp/logs") }; exports.createConfiguration = function(env = {}) { return new Configuration(merge(defaultEnvironment, env)); }; exports.prepareFixtures = function(callback) { return rm_rf(fixturePath("tmp"), function() { return mkdirp(fixturePath("tmp"), function() { return callback(); }); }); }; exports.rm_rf = rm_rf = function(path, callback) { return exec(`rm -rf ${path}`, callback); }; exports.mkdirp = mkdirp = function(path, callback) { return exec(`mkdir -p ${path}`, callback); }; exports.touch = touch = function(path, callback) { return exec(`touch ${path}`, callback); }; exports.swap = swap = function(path1, path2, callback) { var unswap; unswap = function(callback) { return swap(path2, path1, callback); }; return exec(`mv ${path1} ${path1}.swap;\nmv ${path2} ${path1};\nmv ${path1}.swap ${path2}`, function(err) { return callback(err, unswap); }); }; exports.debug = debug = function() { if (process.env.DEBUG) { return console.error.apply(console, arguments); } }; exports.serve = serve = function(server, callback) { return server.listen(0, function() { var port, request; port = server.address().port; debug(`server listening on port ${port}`); request = createRequester(server.address().port); return callback(request, function(callback) { debug(`server on port ${port} is closing`); server.close(); return callback(); }, server); }); }; exports.createRequester = createRequester = function(port) { return function(method, path, headers, callback) { var data, request; if (!callback) { callback = headers; } request = http.request({method, path, port, headers}); if (data = headers.data) { delete headers.data; request.write(data); } request.end(); debug(`client requesting ${method} ${path} on port ${port}`); return request.on("response", function(response) { var body; body = ""; response.on("data", function(chunk) { debug(`client received ${chunk.length} bytes from server on port ${port}`); return body += chunk.toString("utf8"); }); return response.on("end", function() { debug(`client disconnected from server on port ${port}`); return callback(body, response); }); }); }; }; }).call(this);