webpack-mock-server
Version:
Mocks api requests for webpack-dev-server with hot-replacement
66 lines (65 loc) • 2.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = mockServerMiddleware;
const http_1 = __importDefault(require("http"));
const log_1 = __importDefault(require("./log"));
let storedPort = 0;
let isDone = false;
function mockServerMiddleware(app, port) {
storedPort = port;
if (isDone) {
return;
}
let wasError = false;
isDone = true;
app.use((clientReq, clientRes, next) => {
try {
const options = {
hostname: "localhost",
port: storedPort,
path: clientReq.url,
method: clientReq.method,
headers: clientReq.headers,
};
if (clientReq.url === "/" || clientReq.url.startsWith("/?") || clientReq.url.startsWith("?") || !storedPort) {
next();
return;
}
const proxy = http_1.default.request(options, (res) => {
wasError = false;
if (res.statusCode === 404) {
next();
}
else if (res) {
clientRes.writeHead(res.statusCode || 200, res.headers);
res.pipe(clientRes, {
end: true,
});
}
});
clientReq
.pipe(proxy, {
end: true,
})
.on("error", (ex) => {
if (!wasError) {
wasError = true;
if (ex.code === "ECONNREFUSED") {
log_1.default.error(`Server is not available on ${ex.address}${ex.port ? `:${ex.port}` : ""}`);
}
else {
log_1.default.error("", ex);
}
}
next();
});
}
catch (ex) {
log_1.default.error(ex.toString());
next();
}
});
}