Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
const watcherHandler: webpack.ICompiler.Handler = (err, stats) => {
if (err) {
logger.error(err.toString());
reportError(err);
}
if (stats) {
const { errors, warnings, ...displayStats } = stats.toJson({
errorDetails: true,
errors: true,
warnings: true,
entrypoints: false,
modules: false,
assets: false,
reasons: false,
source: false,
chunks: false,
children: false,
// @ts-ignore
function loadFromPath(babelConfigPath) {
let config;
if (fs.existsSync(babelConfigPath)) {
const content = fs.readFileSync(babelConfigPath, 'utf-8');
try {
config = JSON5.parse(content);
config.babelrc = false;
logger.info('=> Loading custom .babelrc');
} catch (e) {
logger.error(`=> Error parsing .babelrc file: ${e.message}`);
throw e;
}
}
if (!config) return null;
// Remove react-hmre preset.
// It causes issues with react-storybook.
// We don't really need it.
// Earlier, we fix this by running storybook in the production mode.
// But, that hide some useful debug messages.
if (config.presets) {
removeReactHmre(config.presets);
}
if (config.env && config.env.development && config.env.development.presets) {
function loadFromPath(babelConfigPath) {
let config;
if (fs.existsSync(babelConfigPath)) {
const content = fs.readFileSync(babelConfigPath, 'utf-8');
try {
config = JSON5.parse(content);
config.babelrc = false;
logger.info('=> Loading custom .babelrc');
} catch (e) {
logger.error(`=> Error parsing .babelrc file: ${e.message}`);
throw e;
}
}
if (!config) return null;
// Remove react-hmre preset.
// It causes issues with react-storybook.
// We don't really need it.
// Earlier, we fix this by running storybook in the production mode.
// But, that hide some useful debug messages.
if (config.presets) {
removeReactHmre(config.presets);
}
if (config.env && config.env.development && config.env.development.presets) {
const testFn = async ({ context }: any) => {
const { kind, framework, name } = context;
if (framework === 'react-native') {
// Skip tests since we de not support RN image snapshots.
logger.error(
"It seems you are running imageSnapshot on RN app and it's not supported. Skipping test."
);
return;
}
const url = constructUrl(storybookUrl, kind, name);
if (!browser || !page) {
logger.error(
`Error when generating image snapshot for test ${kind} - ${name} : It seems the headless browser is not running.`
);
throw new Error('no-headless-browser-running');
}
expect.assertions(1);
address,
networkAddress,
managerTotalTime,
previewTotalTime,
});
if (!options.ci) {
openInBrowser(address);
}
} catch (error) {
// this is a weird bugfix, somehow 'node-pre-gyp' is polluting the npmLog header
npmLog.heading = '';
if (error instanceof Error) {
if (error.error) {
logger.error(error.error);
} else if (error.stats && error.stats.compilation.errors) {
error.stats.compilation.errors.forEach(e => logger.plain(e));
} else {
logger.error(error);
}
}
logger.line();
logger.warn(
error.close
? dedent`
FATAL broken build!, will close the process,
Fix the error below and restart storybook.
`
: dedent`
Broken build, fix the error above.
You may need to refresh the browser.
const serverFactory = async (options: A.ConfigValues['server']) => {
const { ssl, port } = options;
if (ssl) {
if (!ssl.cert) {
logger.error('Error: --ssl-cert is required with --https');
process.exit(-1);
}
if (!ssl.key) {
logger.error('Error: --ssl-key is required with --https');
process.exit(-1);
}
const sslOptions = {
ca: await Promise.all((ssl.ca || []).map(ca => fs.readFile(ca, 'utf-8'))),
cert: await fs.readFile(ssl.cert, 'utf-8'),
key: await fs.readFile(ssl.key, 'utf-8'),
};
return (app: Express) => https.createServer(sslOptions, app);
}
async function getServer(app, options) {
if (!options.https) {
return http.createServer(app);
}
if (!options.sslCert) {
logger.error('Error: --ssl-cert is required with --https');
process.exit(-1);
}
if (!options.sslKey) {
logger.error('Error: --ssl-key is required with --https');
process.exit(-1);
}
const sslOptions = {
ca: await Promise.all((options.sslCa || []).map(ca => fs.readFile(ca, 'utf-8'))),
cert: await fs.readFile(options.sslCert, 'utf-8'),
key: await fs.readFile(options.sslKey, 'utf-8'),
};
return https.createServer(sslOptions, app);
}
`Error when generating image snapshot for test ${kind} - ${name} : It seems the headless browser is not running.`
);
throw new Error('no-headless-browser-running');
}
expect.assertions(1);
let image;
try {
await customizePage(page);
await page.goto(url, getGotoOptions({ context, url }));
await beforeScreenshot(page, { context, url });
image = await page.screenshot(getScreenshotOptions({ context, url }));
} catch (e) {
logger.error(
`Error when connecting to ${url}, did you start or build the storybook first? A storybook instance should be running or a static version should be built when using image snapshot feature.`
);
throw e;
}
expect(image).toMatchImageSnapshot(getMatchOptions({ context, url }));
};
options: presetOptions,
},
];
}
throw new Error(dedent`
${input} is not a valid preset
`);
} catch (e) {
const warning =
level > 0
? ` Failed to load preset: ${JSON.stringify(input)} on level ${level}`
: ` Failed to load preset: ${JSON.stringify(input)}`;
logger.warn(warning);
logger.error(e);
return [];
}
}