mirror of
https://github.com/storybookjs/storybook.git
synced 2025-04-09 00:19:13 +08:00
79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import type { Task } from '../task';
|
|
|
|
import { PORT as devPort, dev } from './dev';
|
|
import { PORT as servePort, serve } from './serve';
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
|
|
export const bench: Task = {
|
|
description: 'Run benchmarks against a sandbox in dev mode',
|
|
dependsOn: ['build'],
|
|
async ready() {
|
|
return false;
|
|
},
|
|
|
|
async run(details, options) {
|
|
const controllers: AbortController[] = [];
|
|
try {
|
|
const { browse } = await import('../bench/browse');
|
|
const { saveBench, loadBench } = await import('../bench/utils');
|
|
const { default: prettyBytes } = await dynamicImport('pretty-bytes');
|
|
const { default: prettyTime } = await dynamicImport('pretty-ms');
|
|
|
|
const devController = await dev.run(details, { ...options, debug: false });
|
|
if (!devController) {
|
|
throw new Error('dev: controller is null');
|
|
}
|
|
controllers.push(devController);
|
|
const devBrowseResult = await browse(`http://localhost:${devPort}`);
|
|
devController.abort();
|
|
|
|
const serveController = await serve.run(details, { ...options, debug: false });
|
|
if (!serveController) {
|
|
throw new Error('serve: controller is null');
|
|
}
|
|
controllers.push(serveController);
|
|
const buildBrowseResult = await browse(`http://localhost:${servePort}`);
|
|
serveController.abort();
|
|
|
|
await saveBench(
|
|
'browse',
|
|
{
|
|
devManagerHeaderVisible: devBrowseResult.managerHeaderVisible,
|
|
devManagerIndexVisible: devBrowseResult.managerIndexVisible,
|
|
devStoryVisible: devBrowseResult.storyVisible,
|
|
devStoryVisibleUncached: devBrowseResult.storyVisibleUncached,
|
|
devAutodocsVisible: devBrowseResult.autodocsVisible,
|
|
devMDXVisible: devBrowseResult.mdxVisible,
|
|
|
|
buildManagerHeaderVisible: buildBrowseResult.managerHeaderVisible,
|
|
buildManagerIndexVisible: buildBrowseResult.managerIndexVisible,
|
|
buildStoryVisible: buildBrowseResult.storyVisible,
|
|
buildAutodocsVisible: buildBrowseResult.autodocsVisible,
|
|
buildMDXVisible: buildBrowseResult.mdxVisible,
|
|
},
|
|
{
|
|
rootDir: details.sandboxDir,
|
|
}
|
|
);
|
|
|
|
const data = await loadBench({ rootDir: details.sandboxDir });
|
|
Object.entries(data).forEach(([key, value]) => {
|
|
if (typeof value !== 'number') {
|
|
return;
|
|
}
|
|
|
|
if (key.includes('Size')) {
|
|
console.log(`${key}: ${prettyBytes(value)}`);
|
|
} else {
|
|
console.log(`${key}: ${prettyTime(value)}`);
|
|
}
|
|
});
|
|
} catch (e) {
|
|
controllers.forEach((c) => c.abort());
|
|
throw e;
|
|
}
|
|
},
|
|
};
|