fbredius/storybook

View on GitHub
lib/core-server/src/presets/common-preset.ts

Summary

Maintainability
A
3 hrs
Test Coverage
import {
  getPreviewBodyTemplate,
  getPreviewHeadTemplate,
  getManagerMainTemplate,
  getPreviewMainTemplate,
  loadCustomBabelConfig,
  getStorybookBabelConfig,
  loadEnvs,
  Options,
} from '@storybook/core-common';

export const babel = async (_: unknown, options: Options) => {
  const { configDir, presets } = options;
  if (options.features?.babelModeV7) {
    return presets.apply('babelDefault', {}, options);
  }

  return loadCustomBabelConfig(
    configDir,
    () => presets.apply('babelDefault', getStorybookBabelConfig(), options) as any
  );
};

export const logLevel = (previous: any, options: Options) => previous || options.loglevel || 'info';

export const previewHead = async (base: any, { configDir, presets }: Options) => {
  const interpolations = await presets.apply<Record<string, string>>('env');
  return getPreviewHeadTemplate(configDir, interpolations);
};

export const env = async () => {
  return loadEnvs({ production: true }).raw;
};

export const previewBody = async (base: any, { configDir, presets }: Options) => {
  const interpolations = await presets.apply<Record<string, string>>('env');
  return getPreviewBodyTemplate(configDir, interpolations);
};

export const previewMainTemplate = () => getPreviewMainTemplate();

export const managerMainTemplate = () => getManagerMainTemplate();

export const previewEntries = (entries: any[] = [], options: { modern?: boolean }) => {
  if (!options.modern)
    entries.push(require.resolve('@storybook/core-client/dist/esm/globals/polyfills'));
  entries.push(require.resolve('@storybook/core-client/dist/esm/globals/globals'));
  return entries;
};

export const typescript = () => ({
  check: false,
  // 'react-docgen' faster but produces lower quality typescript results
  reactDocgen: 'react-docgen-typescript',
  reactDocgenTypescriptOptions: {
    shouldExtractLiteralValuesFromEnum: true,
    shouldRemoveUndefinedFromOptional: true,
    propFilter: (prop: any) => (prop.parent ? !/node_modules/.test(prop.parent.fileName) : true),
    // NOTE: this default cannot be changed
    savePropValueAsString: true,
  },
});

export const features = async (existing: Record<string, boolean>) => ({
  ...existing,
  postcss: true,
  emotionAlias: true,
  warnOnLegacyHierarchySeparator: true,
});