lib/core-common/src/utils/babel.ts
import { TransformOptions } from '@babel/core';
const r = (s: string, local: boolean) => {
return local ? s : require.resolve(s);
};
export const getStorybookBabelConfig = ({ local = false }: { local?: boolean } = {}) => {
return {
sourceType: 'unambiguous',
presets: [
[r('@babel/preset-env', local), { shippedProposals: true, loose: true }],
r('@babel/preset-typescript', local),
],
plugins: [
r('@babel/plugin-transform-shorthand-properties', local),
r('@babel/plugin-transform-block-scoping', local),
/*
* Added for TypeScript experimental decorator support
* https://babeljs.io/docs/en/babel-plugin-transform-typescript#typescript-compiler-options
*/
[r('@babel/plugin-proposal-decorators', local), { legacy: true }],
[r('@babel/plugin-proposal-class-properties', local), { loose: true }],
[r('@babel/plugin-proposal-private-property-in-object', local), { loose: true }],
[r('@babel/plugin-proposal-private-methods', local), { loose: true }],
r('@babel/plugin-proposal-export-default-from', local),
r('@babel/plugin-syntax-dynamic-import', local),
[r('@babel/plugin-proposal-object-rest-spread', local), { loose: true, useBuiltIns: true }],
r('@babel/plugin-transform-classes', local),
r('@babel/plugin-transform-arrow-functions', local),
r('@babel/plugin-transform-parameters', local),
r('@babel/plugin-transform-destructuring', local),
r('@babel/plugin-transform-spread', local),
r('@babel/plugin-transform-for-of', local),
r('babel-plugin-macros', local),
/*
* Optional chaining and nullish coalescing are supported in
* @babel/preset-env, but not yet supported in Webpack due to support
* missing from acorn. These can be removed once Webpack has support.
* See https://github.com/facebook/create-react-app/issues/8445#issuecomment-588512250
*/
r('@babel/plugin-proposal-optional-chaining', local),
r('@babel/plugin-proposal-nullish-coalescing-operator', local),
[
r('babel-plugin-polyfill-corejs3', local),
{
method: 'usage-global',
absoluteImports: r('core-js', local),
// eslint-disable-next-line global-require
version: require('core-js/package.json').version,
},
],
],
} as TransformOptions;
};
export const getStorybookBabelDependencies = () => [
'@babel/preset-env',
'@babel/preset-typescript',
'@babel/plugin-transform-shorthand-properties',
'@babel/plugin-proposal-private-property-in-object',
'@babel/plugin-transform-block-scoping',
'@babel/plugin-proposal-decorators',
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-private-methods',
'@babel/plugin-proposal-export-default-from',
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-object-rest-spread',
'@babel/plugin-transform-classes',
'@babel/plugin-transform-arrow-functions',
'@babel/plugin-transform-parameters',
'@babel/plugin-transform-destructuring',
'@babel/plugin-transform-spread',
'@babel/plugin-transform-for-of',
'babel-plugin-macros',
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-proposal-nullish-coalescing-operator',
'babel-plugin-polyfill-corejs3',
'babel-loader',
'core-js',
];