visreg-test
Version:
A visual regression testing solution that offers an easy setup with simple yet powerful customisation options, wrapped up in a convenient CLI runner to make assessing and accepting/rejecting diffs a breeze.
118 lines (117 loc) • 4.75 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.startServer = exports.getServer = void 0;
const cors = require("cors");
const cli_1 = require("../cli");
const path = require("path");
const routes_1 = require("./routes");
const config_1 = require("./config");
const readline = require("readline");
const express = require("express");
const enableSpaceToOpen = (url) => __awaiter(void 0, void 0, void 0, function* () {
console.log('\nPress SPACE to open');
const rl = readline.createInterface({
input: process.stdin,
});
let answer;
while (true) {
answer = yield new Promise(resolve => {
// Enable raw mode to get individual keypresses
readline.emitKeypressEvents(process.stdin);
if (process.stdin.isTTY)
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {
if (key.name === 'space') {
resolve('web');
}
if (key.ctrl && key.name === 'c') {
process.exit();
}
});
});
if (answer === 'web') {
break;
}
}
if (process.stdin.isTTY)
process.stdin.setRawMode(false);
rl.close();
if (answer === 'web') {
Promise.resolve().then(() => require('open')).then((module) => {
module(url);
});
return;
}
});
let server;
const getServer = () => {
return server;
};
exports.getServer = getServer;
const startServer = (programChoices, diffFiles) => {
const app = express();
app.use((req, res, next) => {
req.local = {};
/**
TODO: I should remove this and just pass the programChoices to the routes and have the diffFiles be fetched by them.
Because I'm doing that now when the user starts a test from the web interface, meaning that I have two ways of doing it now.
*/
req.local.programChoices = programChoices;
req.local.diffFiles = diffFiles;
const rootDirectory = (programChoices === null || programChoices === void 0 ? void 0 : programChoices.containerized) ? '/app' : cli_1.initialCwd;
req.local.rootDirectory = rootDirectory;
req.local.suitesDirectory = path.join(rootDirectory, '/suites');
next();
});
app.use(express.json());
if (process.env.NODE_ENV === 'development') {
// This is used when developing (when React is being served by its dev server as opposed to being built and served by the express server)
app.use(cors({
origin: ['http://localhost:' + config_1.devPort]
}));
console.log('Development mode');
}
else {
// Serve static files
app.use(express.static(path.join(__dirname, 'app')));
}
app.use('/', routes_1.default);
app.get('*', (req, res) => {
res.sendFile(path.resolve(__dirname, 'app', 'index.html'));
});
app.use(function (err, req, res, next) {
console.error(err);
res.send({
error: true,
errorCode: err.errorCode,
errorMessage: err.errorMessage,
});
});
app.listen(config_1.serverPort, () => {
const webInterfacePort = process.env.NODE_ENV === 'development' ? config_1.devPort : config_1.serverPort;
const baseUrl = `http://localhost:${webInterfacePort}`;
const url = diffFiles ? `${baseUrl}/suite/${programChoices.suite}/assessment` : baseUrl;
if (diffFiles) {
console.log(`Assessment is running at ${url}`);
}
else {
console.log(`Web interface is running at ${url}`);
}
// We can't open the browser from inside a container
if (programChoices === null || programChoices === void 0 ? void 0 : programChoices.containerized)
return;
enableSpaceToOpen(url);
});
// server = https.createServer(credentials, app);
// server.listen(8443);
};
exports.startServer = startServer;