1
0
Fork 0
fetch-compare/src/index.ts

96 lines
2.4 KiB
TypeScript

import logger from '@wdio/logger';
import Table from 'cli-table3';
import {Platform, Result, Context} from './types';
import PlatformBrowser from './platform-browser';
import PlatformNode from './platform-node';
import PlatformDeno from './platform-deno';
import {chrome, firefox, safari} from './browser-drivers';
import {FixturesServer} from './server';
const log = logger('fetch-compare');
logger.setLevel('fetch-compare', 'info');
const silent = true;
const platforms: Record<string, Platform> = {
chrome: new PlatformBrowser(chrome, 'chrome', silent),
firefox: new PlatformBrowser(firefox, 'firefox', silent),
safari: new PlatformBrowser(safari, 'safari', silent),
node: new PlatformNode(),
deno: new PlatformDeno(),
};
function* tabularNames(reference: Result): Iterable<[string, string, string]> {
/* eslint-disable guard-for-in */
for (const groupName in reference) {
const results = reference[groupName];
for (const resultName in results) {
const resultObject = results[resultName];
for (const key in resultObject) {
yield [groupName, resultName, key];
}
}
}
/* eslint-enable guard-for-in */
}
function* tabularResults(results: Record<string, Result>): Iterable<string[]> {
const ref = Object.values(results)[0];
if (!ref) {
return;
}
const names = Object.keys(results);
for (const [group, result, key] of tabularNames(ref)) {
for (const n of names) {
yield [
`${group}:${result}:${key}`,
n,
results[n][group][result][key].toString(),
];
}
}
}
async function run() {
// Set up fixtures server
const fixturesServer = new FixturesServer();
const addr = await fixturesServer.start();
// Shared data among platforms
const ctx: Context = {
fixturesURL: addr.base,
};
const results: Record<string, Result> = {};
// Call each platform
/* eslint-disable guard-for-in, no-await-in-loop */
for (const name in platforms) {
try {
results[name] = await platforms[name].run(ctx, 'all');
log.debug(name, results[name]);
} catch (error: Error) {
log.error(name, error);
}
}
/* eslint-enable guard-for-in, no-await-in-loop */
const table = new Table({
head: ['Test', 'Platform', 'Value'],
chars: {mid: '', 'left-mid': '', 'mid-mid': '', 'right-mid': ''},
});
for (const row of tabularResults(results)) {
table.push(row);
}
console.log(table.toString());
// Tear down fixtures server
await fixturesServer.stop();
}
run().catch((error) => {
log.error(error);
});