UNPKG

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
"use strict"; 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;